International PHP Conference Berlin 2025

Класс 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 — Настраивает наблюдателя
Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top