函数名:EventBase::dispatch()
适用版本:EventBase (PECL event >= 1.2.6-beta)
用法:EventBase::dispatch() 函数用于立即分派(dispatch)所有已经被注册的事件,并在当前线程中执行它们的回调函数。该函数将对所有的事件进行遍历,并按照其优先级执行回调函数。
示例:
// 创建一个 EventBase 对象
$base = new EventBase();
// 创建一个定时事件
$timerEvent = Event::timer($base, function() {
echo "定时事件触发\n";
});
// 设置定时事件触发的时间间隔为1秒
$timerEvent->add(1);
// 注册一个信号事件,当接收到 SIGINT 信号时触发
$signalEvent = Event::signal($base, SIGINT, function() use ($base) {
echo "接收到 SIGINT 信号\n";
// 停止事件循环
$base->stop();
});
// 将所有事件分派执行
$base->dispatch();
// 清除事件资源
$timerEvent->free();
$signalEvent->free();
注意:调用 EventBase::dispatch() 会阻塞当前线程,直到事件循环结束或者被调用 EventBase::stop() 函数停止。在进行事件分派前,必须通过调用 EventBase::loop() 或 EventBase::loopExit() 函数之一,开启事件循环,否则事件将不被执行。事件循环会循环执行事件,直到被显式停止。