(PECL event >= 1.2.6-beta)
Event::add — 使事件挂起
标记事件为挂起状态。非挂起事件永远不会发生,并且事件回调永远不会被调用。结合 Event::del(),用户可以随时重新安排事件。
如果对已经挂起的事件调用 Event::add(),libevent 将保持其挂起状态并使用给定的超时时间重新安排它(如果指定)。在这种情况下,如果未指定超时时间,Event::add() 不会产生任何影响。
timeout
以秒为单位的超时时间。
示例 #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
在第一个终端窗口中,您应该捕获以下内容:
Caught signal 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 "Caught signal $no\n";
$this->base->exit();
}
}
$base = new EventBase();
$c = new MyEventSignal($base);
$base->loop();
?>
上面的示例将输出类似于以下内容
Caught signal 15
示例 #2 添加计时器
<?php
$base = new EventBase();
$n = 2;
$e = Event::timer($base, function($n) use (&$e) {
echo "$n seconds elapsed\n";
$e->delTimer();
}, $n);
$e->add($n);
$base->loop();
?>
上面的示例将输出类似于以下内容
2 seconds elapsed