Класс EvTimer
(PECL ev >= 0.2.0)
Введение
Наблюдатели EvTimer - это обычные относительные таймеры, которые создают событие через заданное время и, опционально, переодически повторяют его через заданные интервалы времени.
Таймеры базируются на реальном времени, то есть если задать таймер с повторами раз в час и сбросить системные часы на Январь прошлого года, то таймер будет так-же срабатывать через(грубо) час. "Грубо" потому, что отследить скачки времени достаточно сложно и некоторые неточности неизбежны.
Callback-функция гарантированно запустится только после того, как пройдет заданный таймаут (не ровно в тот же момент, на системах с часами с низким разрешением могут наблюдаться небольшие задержки). Если несколько таймеров будут готовы сработать в одну и ту же итерацию событийного цикла, то callback-функции наблюдателей бцдцт запущены в порядке времени срабатывания и с учетом приоритета (но это не работает, если callback-функции вызывают EvLoop::run() рекурсивно).
Сами по себе таймеры стараются всеми силами избежать накапливания ошибки,
то есть если таймер сконфигурирован срабатывать каждые
10
секунд, то обычно он срабатывает точно
с 10
секундным интервалом. Однако, если
скрипт не поспевает за таймером, поскольку его работа занимает более
10
секунд, то таймер сработает не чаще чем один раз
за итерацию событийного цикла.
Обзор классов
$after
,
float
$repeat
,
callable
$callback
[,
mixed
$data
= NULL
[,
int
$priority
= 0
]] )$after
,
float
$repeat
,
callable
$callback
[,
mixed
$data
= NULL
[,
int
$priority
= 0
]] )Свойства
- repeat
-
Если равно
0.0
, то таймер автоматически остановится, когда истечет таймаут. Если больше нуля, то таймер автоматически перейдет в режим бесконечного повторения через заданные интервалы, пока вы его самостоятельно не остановите. - remaining
-
Возвращает время, оставшееся до срабатывания таймера. Если таймер активен, то данное время будет считаться относительно времени текущего событийного цикла, а если таймер не активен, то оно будет равно сконфигурированному значению таймаута.
То есть, после того, как создан экземпляр EvTimer с
after
равным5.0
иrepeat
равным7.0
, remaining вернет5.0
. Когда таймер запустится и пройдет 1 секунда, remaining вернет4.0
. когда таймер истечет и будет перезапущен, будет "грубо" возвращено7.0
(обычно чуть меньше, так как запуск callback-функции занимает время) и т.д.
Содержание
- EvTimer::again — Restarts the timer watcher
- EvTimer::__construct — Constructs an EvTimer watcher object
- EvTimer::createStopped — Creates EvTimer stopped watcher object
- EvTimer::set — Configures the watcher