boost :: asio :: io_service是否需要停止使用它?

时间:2014-10-18 14:03:39

标签: c++ boost-asio

如果我已经在这样的单独线程中运行了boost的ios服务:

boost::asio::io_service ios;
boost::thread bt(boost::bind(&boost::asio::io_service::run, &ios));

是否可以将它用于套接字或定时器?或者它是否需要在传递给这些构造函数之前停止?

boost::asio::deadline_timer dt1 = boost::asio::deadline_timer(ios);

2 个答案:

答案 0 :(得分:1)

是的,必须运行async io才能工作 - 有关详细说明,请参阅this answer。问题是当没有工作要做时io_service :: run方法返回,而i / o线程可能只是退出。标准解决方案是在启动i / o线程之前创建io_service::work实例。此外,您可能希望在后台线程中catch exceptions以防止i / o循环终止。

答案 1 :(得分:0)

io_service是线程安全的,需要停止才能发布(更多)工作。

当然,只要您希望能够发布其他工作,就必须确保它仍在运行并继续运行。

ioservice::work存在这种情况。