任何获得有关io_service的附加信息的方法

问题描述:

在尝试破解asio应用程序的干净关闭时,我发现它令我非常恼火,因为我调用了.stop()或者因为它没有处理程序而导致ios停止。
另外,当我想杀死它时,我无法找到一种方法来查看它是否在其处理程序中具有处理程序,或者即使某些处理程序正在运行atm。
所以
1)任何办法看到停IOS - .stop或用完工作(任何方式除了可怕的手动bIsAppShuttingDown标志)
2),看看是否io_service对象(之后我叫停止)仍在处理一些? 这样我就可以写任何获得有关io_service的附加信息的方法

ios->stop() 
while(! ios.finished()) 
sleep(1) // :/ 
delete ios; 
+0

那么,如果您停止()io_service,则所有未完成的异步操作都应使用operation_aborted错误代码调用它们的处理程序,以便您可以检查io_service是停止还是不工作。 – DeVadder

通常的模式是派遣在一个单独的线程io_service对象,例如:随后

_thread.reset(new std::thread([&]() { _service.run(); }); // so the dispatching here is in a thread 

,如果你想停止它,等待它完成干净,那么最好的办法是:

_service.stop(); 
_thread->join(); 

这样调用线程被阻塞,直到调度线程终止(发生时调用执行最后处理程序(run())完成。 (AFAIK)无法知道io_service是否失效或是否调用stop(),您肯定可以通过在服务上实例化io_service::work来阻止前者。看文档。