[英]boost::asio hangs in resolver service destructor after throwing out of io_service::run()
我正在使用一個相當簡單的boost :: asio設置,在這里我從主線程調用io_service.run()。 我有一個TCP解析器,並使用異步解析來查找地址。 當查找失敗時,我在異步回調內拋出異常。 我在main函數內的run()調用之外捕獲了此異常。 然后,我在io_service實例(全局)上調用stop()。 但是,當main()返回時,程序將掛起。 事實證明,它正在等待一個永不來自解析程序服務的exit_event_。
我不想掛在出口上。 我做錯了什么嗎? 如果是這樣,該怎么辦? 我沒有在網上找到關於這些事情的太多討論。 我在Windows 7 / 64bit上使用boost 1.41.0。
然后,我在io_service上調用stop()
需要停止io_service
時,嘗試使用此技巧(從io_service文檔復制):
boost::asio::io_service io_service;
auto_ptr<boost::asio::io_service::work> work(
new boost::asio::io_service::work(io_service));
...
work.reset(); // Allow run() to exit.
原因很簡單(同樣來自文檔):調用io_service::stop()
將導致io_service run()調用盡快返回,放棄未完成的操作,並且不允許分派就緒的處理程序。
因此,如果您需要分派所有處理程序,僅調用io_service::stop()
是不夠的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.