# Класс 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 function __construct(
float `$offset` ,
string `$interval` ,
callable `$reschedule_cb` ,
callable `$callback` ,
mixed `$data` = `null` ,
int `$priority` = 0
)
public function again(): void
public function at(): float
final public static function createStopped(
float `$offset` ,
float `$interval` ,
callable `$reschedule_cb` ,
callable `$callback` ,
mixed `$data` = `null` ,
int `$priority` = 0
): EvPeriodic
public function set( float `$offset` , float `$interval` ): void
/* Наследуемые методы */
public function EvWatcher::clear(): int
public function EvWatcher::feed( int `$revents` ): void
public function EvWatcher::getLoop(): EvLoop
public function EvWatcher::invoke( int `$revents` ): void
public function EvWatcher::keepalive( bool `$value` = ?): bool
public function EvWatcher::setCallback( callable `$callback` ): void
public function EvWatcher::start(): void
public function EvWatcher::stop(): void
}

## Свойства

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

## Содержание

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

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open