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

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

Возвращаемые значения

Возвращает объект EvTimer в случае успешного выполнения.

Примеры

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

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

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

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

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

    
// Останавливаем наблюдателя после 2 итераций
    
Ev::iteration() >= 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(100, 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