0

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

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

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

4

1 回答 1

1

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

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

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

于 2012-12-24T12:43:24.597 回答