(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
, mixed $data
= null
, int $priority
= 0 ): EvPrepare