2014-01-24 39 views
1

在嘗試破解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

回答

1

通常的模式是派遣在一個單獨的線程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來阻止前者。看文檔。

相關問題