# Класс EvTimer

(PECL ev >= 0.2.0)

## Введение

Наблюдатели EvTimer — обыкновенные относительные таймеры, которые создают событие через заданное время и, если потребуется, периодически повторяют событие через заданные интервалы времени.

Таймеры базируются на реальном времени, поэтому при установке ежечасных повторений таймера и сбросе системных часов на январь прошлого года таймер всё равно продолжит срабатывать приблизительно каждый час. «Приблизительно» — потому что обнаружить скачки во времени сложно, а отдельные неточности неизбежны.

Callback-функция гарантированно запустится только после превышения заданного времени ожидания, не ровно в тот же момент, поскольку на системах с часами с низким разрешением наблюдаются незначительные задержки. При готовности нескольких таймеров сработать в одну и ту же итерацию событийного цикла callback-функции наблюдателей запускаются в порядке времени срабатывания и с учётом приоритета, но это не работает, если callback-функции вызывают метод EvLoop::run() рекурсивно.

Сами таймеры стараются не накапливать ошибки, поэтому при конфигурации таймера на срабатывание каждые `10` секунд, таймер срабатывает точно с интервалом в `10` секунд. Но если скрипт не поспевает за таймером, поскольку работает больше `10` секунд, таймер сработает не чаще одного раза за итерацию событийного цикла.

## Обзор класса

class EvTimer extends EvWatcher {
/* Свойства */
public $repeat;
public $remaining;
/* Наследуемые свойства */
public $is_active;
public $data;
public $is_pending;
public $priority;
/* Методы */
public function __construct(
float `$after` ,
float `$repeat` ,
callable `$callback` ,
mixed `$data` = `null` ,
int `$priority` = 0
)
public function again(): void
final public static function createStopped(
float `$after` ,
float `$repeat` ,
callable `$callback` ,
mixed `$data` = `null` ,
int `$priority` = 0
): EvTimer
public function set( float `$after` , float `$repeat` ): void
/* Наследуемые методы */
public function EvWatcher::clear(): int
public function EvWatcher::feed( int `$revents` ): void
public function EvWatcher::getLoop(): EvLoop
public function EvWatcher::invoke( int `$revents` ): void
public function EvWatcher::keepalive( bool `$value` = ?): bool
public function EvWatcher::setCallback( callable `$callback` ): void
public function EvWatcher::start(): void
public function EvWatcher::stop(): void
}

## Свойства

repeat
  При значении `0.0` таймер автоматически остановится после превышения времени ожидания. При значении больше нуля таймер автоматически перейдёт в режим бесконечного повторения через заданные интервалы, пока таймер не остановят вручную.
remaining
  Возвращает время, которое осталось до срабатывания таймера. Для активного таймера время отсчитывается относительно времени текущего событийного цикла, а если для неактивного — равняется времени ожидания, которое указали в конфигурации. Поэтому после создания экземпляра EvTimer с параметром `after` со значением `5.0` и параметром `repeat` со значением `7.0` свойство remaining вернёт значение `5.0`. Свойство remaining вернёт значение `4.0`, когда таймер запустится и пройдёт 1 секунда. После истечения и перезапуска таймера свойство вернёт значение около `7.0`; часто несколько меньше, поскольку запуск callback-функции занимает время.

## Содержание

- EvTimer::again — Перезапускает таймер наблюдателя
- EvTimer::__construct — Создаёт объект наблюдателя EvTimer
- EvTimer::createStopped — Создаёт остановленного наблюдателя EvTimer
- EvTimer::set — Настраивает наблюдателя

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open