(PECL ev >= 0.2.0)
EvPrepare 和 EvCheck 观察者通常成对使用。 EvPrepare 观察者在进程阻塞之前被调用,EvCheck 之后被调用。
不允许从 EvPrepare 或 EvCheck 观察者调用 EvLoop::run() 或类似方法或函数,这些方法或函数将进入当前事件循环。 然而,除了当前循环之外的其他循环是可以的。 这背后的基本原理是,在这些观察者中不需要检查递归,即序列将始终是: EvPrepare -> 阻塞 -> EvCheck ,因此,如果每个类型都有一个观察者,它们将始终在成对地包围阻塞调用时被调用。
主要目的是将其他事件机制集成到 libev 中,它们的使用有点高级。 例如,它们可用于跟踪变量更改、实现自定义观察者、集成 net-snmp 或协程库等等。 它们有时也用于缓存一些数据,并希望在阻塞之前将其刷新。
建议为 EvCheck 观察者提供最高(Ev::MAXPRI
)优先级,以确保它们在轮询后比任何其他观察者都先运行(这对 EvPrepare 观察者来说并不重要)。
此外,EvCheck 观察者不应激活/馈送事件。 虽然 libev 完全支持这一点,但它们可能会在其他 EvCheck 观察者完成其工作之前被执行。
$callback
, string $data
= ?, string $priority
= ?): object