在基于事件驱动/事件循环的程序中为每个回调设置截止日期

时间:2012-12-24 12:35:19

标签: multithreading callback libevent event-loop

在像libevent这样的典型ASIO或基于事件的编程库中,有没有办法为每个回调设置截止日期?

我担心回调中可能存在无限循环。有没有办法优雅地检测它们,从任务队列中删除行为不当的回调并继续处理队列中的其他任务?

我可以想办法通过外部线程检测它并杀死事件循环线程并创建一个不同的线程,但我试图看看是否还有其他常用方法。我相信这是某个人在某个时间点遇到的问题并通过解决方案进行思考

1 个答案:

答案 0 :(得分:1)

没有合作,没有一般方法可以解开线程,无论它是否正在运行回调。该线程可能会持有关键锁定,或者可能已经获得了永远不会释放的资源,如果线程以某种方式被强制阻止从外部停止。

如果您确实需要此功能,那么所有可能被中断的代码必须设计为支持某种特定的中断方法。您可以在输入回调时启动截止时间计时器,并在完成后取消它。截止日期计时器必须触发线程的中断机制。您需要至少一个运行I / O服务的其他线程,以便某些线程在另一个线程中运行回调时运行计时器处理程序。

您还可以使用某种包装器在自己的进程中隔离代码。然后,如果代码无法终止,您可以从外部终止进程。