我打电话给boost::asio::io_service::run()
并立即返回,因为它没有工作要做
一个不同的线程将在稍后排队工作,但我不希望run
线程退出
解决方案是忙于等待运行:
while(true) service.run();
但是当没有工作要做时,这会浪费CPU
另一种方法是等待每次排队等待服务时引发的事件
这种方式有一个竞争:如果一个线程停止工作,然后第二个线程发布工作并在第一个有机会等待它之前引发事件,第一个线程将永远等待。
我宁愿避免这种情况,并在有工作要做时知道服务。
是否可以做类似的事情:
while(true)
{
service.wait_for_work();
service.run();
}