2024 年 PHP Conference Japan

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
"收到信號 $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 秒經過\n";
$e->delTimer();
},
$n);
$e->add($n);
$base->loop();
?>

上述範例會輸出類似以下的內容

2 seconds elapsed

另請參閱

新增註釋

使用者貢獻的註釋

此頁面沒有使用者貢獻的註釋。
To Top