【问题标题】:Run boost asio io_service forever永远运行 boost asio io_service
【发布时间】:2016-10-29 18:16:32
【问题描述】:

我打电话给boost::asio::io_service::run(),它立即返回,因为它没有工作要做。
稍后将有一个不同的线程将工作排队,但我不希望run 线程退出。
解决方法是忙着等待运行:

while(true) service.run();

但是当没有工作要做时,这会浪费 CPU。
另一种方法是等待每次在服务排队时引发的事件。
这种方式有一个竞争:如果一个线程停止工作,然后第二个线程发布工作并在第一个线程有机会等待它之前引发事件,第一个线程将永远等待。
我宁愿避免这种情况,让服务知道什么时候有工作要做。
是否可以做类似的事情:

while(true)
{
    service.wait_for_work();
    service.run();
}

【问题讨论】:

    标签: c++ boost boost-asio


    【解决方案1】:

    @987654321@ 对象就是为此目的而存在的。

    【讨论】:

    • 我不太明白。你的解决方案只是io_service service; io_service::work work(service); service.run();吗?
    • 是的,如果您需要控制工作对象的生命周期,请将其存储在智能指针中。工作对象将阻止 io_service::run 在它存在时退出。
    猜你喜欢
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 2017-09-17
    • 2012-11-26
    • 2011-12-18
    • 2018-11-26
    相关资源
    最近更新 更多