LonghornPHP 2026

Класс EvTimer

(PECL ev >= 0.2.0)

Введение

Наблюдатели EvTimer — обыкновенные относительные таймеры, которые создают событие через заданное время и, если потребуется, периодически повторяют событие через заданные интервалы времени.

Таймеры базируются на реальном времени, поэтому при установке ежечасных повторений таймера и сбросе системных часов на январь прошлого года таймер всё равно продолжит срабатывать приблизительно каждый час. «Приблизительно» — потому что обнаружить скачки во времени сложно, а отдельные неточности неизбежны.

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

Сами таймеры стараются не накапливать ошибки, поэтому при конфигурации таймера на срабатывание каждые 10 секунд, таймер срабатывает точно с интервалом в 10 секунд. Но если скрипт не поспевает за таймером, поскольку работает больше 10 секунд, таймер сработает не чаще одного раза за итерацию событийного цикла.

Обзор класса

class EvTimer extends EvWatcher {
/* Свойства */
public $repeat ;
public $remaining ;
/* Наследуемые свойства */
public $is_active ;
public $data ;
public $is_pending ;
public $priority ;
/* Методы */
public function __construct (
float $after ,
float $repeat ,
callable $callback ,
mixed $data = null ,
int $priority = 0
)
public function again (): void
final public static function createStopped (
float $after ,
float $repeat ,
callable $callback ,
mixed $data = null ,
int $priority = 0
): EvTimer
public function set ( float $after , float $repeat ): 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
}

Свойства

repeat

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

remaining

Возвращает время, которое осталось до срабатывания таймера. Для активного таймера время отсчитывается относительно времени текущего событийного цикла, а если для неактивного — равняется времени ожидания, которое указали в конфигурации.

Поэтому после создания экземпляра EvTimer с параметром after со значением 5.0 и параметром repeat со значением 7.0 свойство remaining вернёт значение 5.0. Свойство remaining вернёт значение 4.0, когда таймер запустится и пройдёт 1 секунда. После истечения и перезапуска таймера свойство вернёт значение около 7.0; часто несколько меньше, поскольку запуск callback-функции занимает время.

Содержание

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

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

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

AltStyle によって変換されたページ (->オリジナル) /