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

Does boost::asio::io_service need to be stopped to use it?

本文关键字:service asio 是否 boost io      更新时间:2023-10-16

如果我已经有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);

是的,异步io必须运行它才能工作-有关详细解释,请参阅此答案。问题是io_service::run方法在没有工作要做并且i/o线程可能只是退出时返回。标准的解决方案是在启动i/o线程之前创建io_service::work实例。此外,您可能希望在后台线程中捕获异常,以防止i/o循环终止。

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

当然,你必须确保它仍然在运行,并且只要你想发布额外的工作,它就会一直运行。

CCD_ 2存在于该瞳孔中。