update page now

Класс 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 __construct(
     float $after ,
     float $repeat ,
     callable $callback ,
     mixed $data = null ,
     int $priority = 0
)
public again(): void
final public static createStopped(
     float $after ,
     float $repeat ,
     callable $callback ,
     mixed $data = null ,
     int $priority = 0
): EvTimer
public set( float $after , float $repeat ): 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
}

Свойства

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

Содержание

Добавить

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

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