(PECL event >= 1.2.6-beta)
Event::add — Перевести событие в состояние ожидания
Переводит событие в состояние ожидания. Не ожидающие события никогда не сработают и не вызовут callback-функцию. В сочетании с Event::del(), событие может быть перезапланированно пользователем в любое время.
Если метод Event::add() вызван для уже ожидающего события, libevent оставит его в состоянии ожидания и перезапланирует его в соответствии с заданным временем ожидания (если оно задано). Если время ожидания не задано, то Event::add() не возымеет какого-либо эффекта.
timeout
Время ожидания в секундах.
Функция возвращает true
, если выполнилась успешно, или false
, если возникла ошибка.
Пример #1 Добавление пользовательского сигнала
<?php
/*
Запустите в окне терминала:
$ php examples/signal.php
В другом окне терминала узнайте pid и отправьте SIGTERM, например:
$ ps aux | grep examp
ruslan 3976 0.2 0.0 139896 11256 pts/1 S+ 10:25 0:00 php examples/signal.php
ruslan 3978 0.0 0.0 9572 864 pts/2 S+ 10:26 0:00 grep --color=auto examp
$ kill -TERM 3976
В первом окне терминала вы должны увидеть следующее:
Пойманный сигнал 15
*/
class MyEventSignal {
private $base, $ev;
public function __construct($base) {
$this->base = $base;
$this->ev = Event::signal($base, SIGTERM, array($this, 'eventSighandler'));
$this->ev->add();
}
public function eventSighandler($no, $c) {
echo "Пойманный сигнал $no\n";
$this->base->exit();
}
}
$base = new EventBase();
$c = new MyEventSignal($base);
$base->loop();
?>
Вывод приведённого примера будет похож на:
Пойманный сигнал 15
Пример #2 Добавление таймера
<?php
$base = new EventBase();
$n = 2;
$e = Event::timer($base, function($n) use (&$e) {
echo "Прошло секунд: $n\n";
$e->delTimer();
}, $n);
$e->add($n);
$base->loop();
?>
Вывод приведённого примера будет похож на:
Прошло секунд: 2