Класс 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
) : EvTimerСвойства
- repeat
-
Если равно
0.0
, то таймер автоматически остановится, когда истечет таймаут. Если больше нуля, то таймер автоматически перейдет в режим бесконечного повторения через заданные интервалы, пока вы его самостоятельно не остановите. - remaining
-
Возвращает время, оставшееся до срабатывания таймера. Если таймер активен, то данное время будет считаться относительно времени текущего событийного цикла, а если таймер не активен, то оно будет равно сконфигурированному значению таймаута.
То есть, после того, как создан экземпляр EvTimer с
after
равным5.0
иrepeat
равным7.0
, remaining вернет5.0
. Когда таймер запустится и пройдет 1 секунда, remaining вернет4.0
. когда таймер истечет и будет перезапущен, будет "грубо" возвращено7.0
(обычно чуть меньше, так как запуск callback-функции занимает время) и т.д.
Содержание
- EvTimer::again — Перезапускает таймер наблюдателя
- EvTimer::__construct — Конструктор объекта наблюдателя EvTimer
- EvTimer::createStopped — Создает остановленный наблюдатель EvTimer
- EvTimer::set — Настраивает наблюдателя