(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 таймер автоматически остановится
после превышения времени ожидания. При значении больше нуля таймер автоматически
перейдёт в режим бесконечного повторения через заданные интервалы,
пока таймер не остановят вручную.
after со значением
5.0 и параметром repeat
со значением 7.0 свойство remaining
вернёт значение 5.0. Свойство remaining
вернёт значение 4.0, когда таймер запустится и пройдёт 1 секунда.
После истечения и перезапуска таймера свойство вернёт значение около 7.0;
часто несколько меньше, поскольку запуск callback-функции занимает время.