CakeFest 2024: The Official CakePHP Conference

Класс EvPeriodic

(PECL ev >= 0.2.0)

Введение

Периодические наблюдатели также, своего рода, таймеры, но гораздо более непостоянные.

В отличие от EvTimer , наблюдатели EvPeriodic базируются не на реальном времени (или относительном времени, физически прошедшем), а на "системном" (том, которое показывается на ваших часах). Разница в том, что такое время может идти быстрее или медленнее "реального", или вообще скакать, в момент перехода на зимнее/летнее время или просто ручного изменения времени.

Наблюдатель EvPeriodic можно сконфигурировать на срабатывание после определённого времени. Например, если наблюдатель EvPeriodic сконфигурирован сработать "в 10 секунд" (т.е. EvLoop::now() + 10.0 секунд по "системному" времени, а не через 10 секунд!) и сразу после этого системное время сбросили на первое Января прошлого года, то наблюдатель сработает через год или больше, ровно в тот момент, когда системное время будет равно заданному. В то время как EvTimer просто сработает через 10 секунд после запуска.

Также как и с таймерами, callback-функция гарантированно сработает после наступления необходимого времени. Если несколько таймеров будут готовы сработать в одной и той же итерации событийного цикла, то первыми сработают те, которые должны сработать раньше по времени. (это более не распространяется на ситуации, когда callback-функции рекурсивно вызывают EvLoop::run()).

Обзор классов

class EvPeriodic extends EvWatcher {
/* Свойства */
public $offset;
public $interval;
/* Наследуемые свойства */
public $is_active;
public $data;
public $is_pending;
public $priority;
/* Методы */
public __construct(
     float $offset ,
     string $interval ,
     callable $reschedule_cb ,
     callable $callback ,
     mixed $data = null ,
     int $priority = 0
)
public again(): void
public at(): float
final public static createStopped(
     float $offset ,
     float $interval ,
     callable $reschedule_cb ,
     callable $callback ,
     mixed $data = null ,
     int $priority = 0
): EvPeriodic
public set( float $offset , float $interval ): void
/* Наследуемые методы */
public EvWatcher::feed( int $revents ): void
public EvWatcher::invoke( int $revents ): void
public EvWatcher::keepalive( bool $value = ?): bool
public EvWatcher::setCallback( callable $callback ): void
}

Свойства

offset

При повторении этот параметр содержит значение смещения, в противном случае - абсолютное время (значение смещения передаётся в EvPeriodic::set() , хотя libev может его поменять для лучшей численной стабильности).

interval

Текущее значение интервала. Может быть изменено в любое время, но изменения вступят в силу только после срабатывания наблюдателя, либо при вызове EvPeriodic::again().

Содержание

  • EvPeriodic::again — Останавливает и снова запускает периодический наблюдатель
  • EvPeriodic::at — Возвращает абсолютное время, когда наблюдатель запустится в следующий раз
  • EvPeriodic::__construct — Конструктор объекта наблюдателя EvPeriodic
  • EvPeriodic::createStopped — Создаёт остановленный наблюдатель EvPeriodic
  • EvPeriodic::set — Настраивает наблюдателя
add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top