(PECL ev >= 0.2.0)
EvTimer::__construct — Конструктор объекта наблюдателя EvTimer
$after
,
float
$repeat
,
callable
$callback
[,
mixed
$data
= NULL
[,
int
$priority
= 0
]] )Конструктор объекта наблюдателя EvTimer.
after
Настраивает таймер для запуска через
after
секунд.
repeat
Если время повтора равно 0.0
,
то он будет автоматически остановлен после истечения времени ожидания.
Если положительное, таймер будет автоматически настроен на повторный запуск
каждые повторяющиеся секунды, пока не будет остановлен вручную.
callback
Смотрите Наблюдатели callback-функций .
data
Пользовательские данные, связанные с наблюдателем.
priority
Возвращает объект EvTimer в случае успешного выполнения.
Пример #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