Класс EvTimer

(PECL ev >= 0.2.0)

Введение

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

Таймеры базируются на реальном времени, то есть если задать таймер с повторами раз в час и сбросить системные часы на Январь прошлого года, то таймер будет так-же срабатывать через(грубо) час. "Грубо" потому, что отследить скачки времени достаточно сложно и некоторые неточности неизбежны.

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

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

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

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

Свойства

repeat

Если равно 0.0, то таймер автоматически остановится, когда истечет таймаут. Если больше нуля, то таймер автоматически перейдет в режим бесконечного повторения через заданные интервалы, пока вы его самостоятельно не остановите.

remaining

Возвращает время, оставшееся до срабатывания таймера. Если таймер активен, то данное время будет считаться относительно времени текущего событийного цикла, а если таймер не активен, то оно будет равно сконфигурированному значению таймаута.

То есть, после того, как создан экземпляр EvTimer с after равным 5.0 и repeat равным 7.0, remaining вернет 5.0. Когда таймер запустится и пройдет 1 секунда, remaining вернет 4.0. когда таймер истечет и будет перезапущен, будет "грубо" возвращено 7.0 (обычно чуть меньше, так как запуск callback-функции занимает время) и т.д.

Содержание

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top