gpt4 book ai didi

c++ - 永远运行 boost asio io_service

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:23:20 26 4
gpt4 key购买 nike

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

while(true) service.run();

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

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

最佳答案

<a href="http://www.boost.org/doc/libs/1_62_0/doc/html/boost_asio/reference/io_service__work.html" rel="noreferrer noopener nofollow">io_service::work</a>对象为此目的而存在。

关于c++ - 永远运行 boost asio io_service,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40322155/

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