(PECL ev >= 0.2.0)
Периодические наблюдатели также, своего рода, таймеры, но гораздо более непостоянные.
В отличие от EvTimer , наблюдатели EvPeriodic базируются не на реальном времени (или относительном времени, физически прошедшем), а на «системном» (том, которое показывается на ваших часах). Разница в том, что такое время может идти быстрее или медленнее «реального», или вообще скакать, в момент перехода на зимнее или летнее время или просто ручного изменения времени.
Наблюдатель EvPeriodic можно сконфигурировать на
срабатывание после конкретного времени. Например, если наблюдатель
EvPeriodic сконфигурирован сработать
«через 10 секунд»
(т. е.
EvLoop::now()
+
10.0
секунд по «системному» времени, а не через 10 секунд!)
и сразу после этого системное время сбросили на
первое января прошлого года, то наблюдатель сработает
через год или больше, ровно в тот момент, когда системное время будет равно заданному.
В то время как EvTimer просто сработает через
10
секунд после запуска.
Также как и с таймерами, callback-функция гарантированно сработает после наступления необходимого времени. Если несколько таймеров будут готовы сработать в одной и той же итерации событийного цикла, то первыми сработают те, которые должны сработать раньше по времени. (это более не распространяется на ситуации, когда callback-функции рекурсивно вызывают EvLoop::run()).
$offset
,$interval
,$reschedule_cb
,$callback
,$data
= null
,$priority
= 0
$offset
,$interval
,$reschedule_cb
,$callback
,$data
= null
,$priority
= 0
При повторении этот параметр содержит значение смещения, в противном случае — абсолютное время (значение смещения передаётся в метод EvPeriodic::set() , хотя libev может его поменять для лучшей численной стабильности).
Текущее значение интервала. Разрешается изменить в любое время, но изменения вступят в силу только после срабатывания наблюдателя, либо при вызове метода EvPeriodic::again().