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