PHP Conference Nagoya 2025

EvTimer::__construct

(PECL ev >= 0.2.0)

EvTimer::__constructКонструктор объекта наблюдателя EvTimer

Описание

public EvTimer::__construct(
     float $after ,
     float $repeat ,
     callable $callback ,
     mixed $data = null ,
     int $priority = 0
)

Конструктор объекта наблюдателя EvTimer.

Список параметров

after

Настраивает таймер для запуска через after секунд.

repeat

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

callback

Смотрите Наблюдатели callback-функций .

data

Пользовательские данные, связанные с наблюдателем.

priority

Приоритет наблюдателя

Примеры

Пример #1 Простые таймеры

<?php
// Создаёт и запускает таймер через 2 секунды
$w1 = new EvTimer(2, 0, function () {
echo
"2 секунды прошло\n";
});

// Создаёт и запускает таймер через 2 секунды, повторяя каждую секунду
// пока мы не остановим его вручную
$w2 = new EvTimer(2, 1, function ($w) {
echo
"вызывается каждую секунду, запускается через 2 секунды\n";
echo
"итерация = ", Ev::iteration(), PHP_EOL;

// Останавливаем наблюдателя после 5 итераций
Ev::iteration() == 5 and $w->stop();
// Останавливаем наблюдателя, если дальнейшие вызовы вызовут более 10 итераций
Ev::iteration() >= 10 and $w->stop();
});

// Создаём остановленный таймер. Он будет неактивным, пока мы не запустим его сами
$w_stopped = EvTimer::createStopped(10, 5, function($w) {
echo
"Callback-функция таймера, созданного как остановленный\n";

// Останавливаем наблюдателя после 2 итераций
Ev::iteration() >= 2 and $w->stop();
});

// Цикл до вызова Ev::stop() или остановки всех наблюдателей
Ev::run();

// Запускаем и смотрим, работает ли он
$w_stopped->start();
echo
"Запустили одну итерацию\n";
Ev::run(Ev::RUN_ONCE);

echo
"Перезапустили второй наблюдатель и пробуем обработать те же события, но не блокируем\n";
$w2->again();
Ev::run(Ev::RUN_NOWAIT);

$w = new EvTimer(10, 0, function() {});
echo
"Запуск заблокированного цикла\n";
Ev::run();
echo
"END\n";
?>

Вывод приведённого примера будет похож на:

2 секунды прошло
вызывается каждую секунду, запускается через 2 секунды
итерация = 1
вызывается каждую секунду, запускается через 2 секунды
итерация = 2
вызывается каждую секунду, запускается через 2 секунды
итерация = 3
вызывается каждую секунду, запускается через 2 секунды
итерация = 4
вызывается каждую секунду, запускается через 2 секунды
итерация = 5
Запустили одну итерацию
Callback-функция таймера, созданного как остановленный
Перезапустили второй наблюдатель и пробуем обработать те же события, но не блокируем
Запуск заблокированного цикла
вызывается каждую секунду, запускается через 2 секунды
итерация = 8
вызывается каждую секунду, запускается через 2 секунды
итерация = 9
итерация каждую секунду, запускается через 2 секунды
итерация = 10
END
Добавить

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

up
2
Jayesh Wadhwani
11 years ago
Example of passing custom data:

<?php
// Create and start timer firing after 2 seconds with custom data
$w1 = new EvTimer(2, 0, function ($w) {
echo
"Custom data: $w->data\n";
echo
"2 seconds elapsed\n";
},
'abcd');
Ev::run();
?>
Running this will print out:
Custom data: abcd
2 seconds elapsed

Note that 'data' is a public property of the event EvWatcher class.
To Top