我有来自this之类食谱的boost::asio::io_service
线程池。我想知道如何中断发布到它的任务(不杀死线程),以便它们将被替换为池中的下一个任务?
答案 0 :(得分:1)
一般来说,boost :: asio中的回调应该相当快。他们应该做一些工作,安排另一个工作并完成。这将是任务失去CPU的点,其他任务将被执行。
有boost::thread::interrupt()
和boost::thread_group::interrupt_all()
,但他们只能在中断点停止执行线程。中断将被视为例外boost::thread_interrupted
。这意味着,您必须以某种方式处理异常,并在您的情况下 - 释放当前任务。它比处理剩余的处理和调度处理程序的步骤要复杂得多。
此外,您可以在执行自己的例程的线程中使用interrupt()
和interrupt_all()
,而对于运行io_service::run()
的线程则不是这种情况。可以想象,boost::thread_interrupted
被抛出run()
方法,而不是异步处理程序,这可能以意外行为结束。