(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().