gpt4 book ai didi

c++ - 如何使 boost::asio 线程池中的任务可取消/可中断?

转载 作者:行者123 更新时间:2023-11-28 08:03:22 25 4
gpt4 key购买 nike

我有一个用 boost::asio::io_service 制作的线程池,来自类似 this 的食谱.我想知道如何中断发布到其中的任务(而不是杀死线程),以便将它们替换为池中的下一个任务?

最佳答案

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

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

此外,您可以在执行您自己的例程的线程中使用 interrupt()interrupt_all(),而运行 io_service::run()。可以想象,boost::thread_interrupted 被抛入 run() 方法,而不是异步处理程序,这可能会以意外行为结束。

关于c++ - 如何使 boost::asio 线程池中的任务可取消/可中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10795971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com