array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'ru', ), 'this' => array ( 0 => 'class.evperiodic.php', 1 => 'EvPeriodic', ), 'up' => array ( 0 => 'book.ev.php', 1 => 'Ev', ), 'prev' => array ( 0 => 'evloop.verify.php', 1 => 'EvLoop::verify', ), 'next' => array ( 0 => 'evperiodic.again.php', 1 => 'EvPeriodic::again', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'ru', 'path' => 'reference/ev/evperiodic.xml', ), 'extra_header_links' => array ( 'rel' => 'alternate', 'href' => '/manual/en/feeds/class.evperiodic.atom', 'type' => 'application/atom+xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(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().