(PECL ev >= 0.2.0)
Наблюдатели EvTimer — обычные относительные таймеры, которые создают событие через заданное время и, опционально, периодически повторяют его через заданные интервалы времени.
Таймеры базируются на реальном времени, то есть если задать таймер с повторами раз в час и сбросить системные часы на Январь прошлого года, то таймер будет все также срабатывать через (примерно) час. «Примерно» потому, что обнаружить скачки во времени сложно, а отдельные неточности неизбежны.
Callback-функция гарантированно запустится только после того, как пройдёт превышение заданного времени ожидания (не ровно в тот же момент, т. к. на системах с часами с низким разрешением могут наблюдаться небольшие задержки). Если несколько таймеров будут готовы сработать в одну и ту же итерацию событийного цикла, то callback-функции наблюдателей будут запущены в порядке времени срабатывания и с учётом приоритета (но это не работает, если callback-функции вызывают метод EvLoop::run() рекурсивно).
Сами по себе таймеры стараются всеми силами избежать накапливания ошибки,
то есть если таймер сконфигурирован срабатывать каждые
10
секунд, то обычно он срабатывает точно
с 10
секундным интервалом. Однако, если
скрипт не поспевает за таймером, поскольку его работа занимает более
10
секунд, то таймер сработает не чаще чем один раз
за итерацию событийного цикла.
$after
,$repeat
,$callback
,$data
= null
,$priority
= 0
$after
,$repeat
,$callback
,$data
= null
,$priority
= 0
Если равно 0.0
, то таймер автоматически остановится,
когда будет превышено время ожидания. Если больше нуля, то таймер автоматически
перейдёт в режим бесконечного повторения через заданные интервалы, пока
его не остановят самостоятельно.
Возвращает время, оставшееся до срабатывания таймера. Если таймер активен, то это время будет считаться относительно времени текущего событийного цикла, а если таймер неактивен, то оно будет равно сконфигурированному значению времени ожидания.
То есть, после создания экземпляра
EvTimer с параметром after
со значением
5.0
и параметром repeat
со значением 7.0
, remaining
вернёт 5.0
. Когда таймер запустится и пройдёт 1 секунда,
remaining вернёт 4.0
.
Когда таймер истечёт и будет перезапущен, он вернёт «примерно»
7.0
(обычно чуть меньше, потому что запуск callback-функции занимает время)
и т. д.