0

我有一个用这样boost::asio::io_service的配方制成的线程池。我想知道如何中断发布到它的任务(不杀死线程),以便将它们替换为池中的下一个任务?

4

1 回答 1

1

boost::asio 中的回调通常应该相当快。他们应该只做一些工作,安排另一项工作并完成。这将是任务失去 CPU 和其他任务将被执行的点。

boost::thread::interrupt()and boost::thread_group::interrupt_all(),但它们只能在中断点停止执行线程。中断将被视为异常boost::thread_interrupted。这意味着,您必须以某种方式处理异常,并且在您的情况下 - 释放当前任务。它比仅执行一步处理和调度处理程序要复杂得多。

此外,您可以使用interrupt()interrupt_all()在执行您自己的例程的线程中进行操作,而对于正在运行的线程则不是这样io_service::run()。可以想象,这boost::thread_interrupted是在run()方法内部抛出的,而不是异步处理程序,这可能会以意外行为结束。

于 2012-05-29T11:26:56.760 回答