PHP Conference Japan 2024

Event::add

(PECL event >= 1.2.6-beta)

Event::add使事件处于待处理状态

描述

public Event::add( float $timeout = ?): bool

标记事件为待处理。非待处理事件将永远不会发生,并且永远不会调用事件回调。结合 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

在第一个终端窗口中,您应该捕获以下内容:

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

参见

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top