在尝试完全关闭 asio 应用程序时,我发现我不知道 ios 停止是因为我调用了 .stop() 还是因为它用完了处理程序,这让我很恼火。
此外,当我想杀死它时,我无法找到一种方法来查看它的处理程序 q 中是否有处理程序,或者即使某些处理程序正在运行 atm。
所以
1) 以任何方式查看是什么停止了 ios - .stop 或工作用完(糟糕的手动 bIsAppShuttingDown 标志除外)
2)有什么方法可以查看 io_service(在我调用停止后)是否仍在处理某些东西?
所以我可以写
ios->stop()
while(! ios.finished())
sleep(1) // :/
delete ios;
最佳答案
通常,模式是在单独的线程中调度 io_service,例如:
_thread.reset(new std::thread([&]() { _service.run(); }); // so the dispatching here is in a thread
随后,如果你想停止它并等待它干净地完成,那么最好的方法是:
_service.stop();
_thread->join();
这样,调用线程将被阻塞,直到分派(dispatch)线程终止(这发生在执行最后一个处理程序 (run()
) 的调用完成时。没有办法(据我所知)知道是否io_service 用完了工作或者 stop()
是否被调用,你当然可以通过在服务上实例化 io_service::work
来防止前者。请参阅文档。
关于c++ - 任何获取有关 io_service 的附加信息的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21333414/