如果我已经在这样的单独线程中运行了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);
答案 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
存在这种情况。