io_service :: run()的专用线程

时间:2009-12-21 20:51:09

标签: c++ concurrency boost-asio

我想提供一个由一个全局线程驱动的全局io_service。很简单,我只是调用线程体io_service::run()。但是,如果没有工作要做,则runrun_onepollpoll_one)会返回。但是,如果线程反复调用run(),它将在没有任何操作时忙于循环。

我正在寻找一种方法来阻止线程,而在io_service中没有任何工作要做。我可以在混合中添加一个全局事件来阻止线程。但是,这将要求io_service的用户在每次使用该服务时通知该事件。不是理想的解决方案。

注意:没有实际的全局变量,我从不使用事件进行并发我只是将问题简化为我的确切需要。真正的目标是asio::deadline_timer子类,不需要io_service作为构造参数。

1 个答案:

答案 0 :(得分:21)

您需要创建一个io_service::work对象。

请参阅文档的这一部分:

Stopping the io_service from running out of work