(PECL ev >= 0.2.0)
EvTimer::__construct — Создаёт объект наблюдателя EvTimer
$after
,$repeat
,$callback
,$data
= null
,$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