[英]Unable to catch exception from boost::asio::io_service::run
[英]Should the exception thrown by boost::asio::io_service::run() be caught?
如果出現錯誤, boost::asio::io_service::run()
會引發boost::system::system_error
異常。 我應該處理這個例外嗎? 如果是這樣,怎么辦?
我的main.cpp代碼是這樣的:
main()
{
boost::asio::io_service queue;
boost::asio::io_service::work work(queue);
{
// set some handlers...
**queue.run();**
}
// join some workers...
return 0;
}
是。
據記錄,傳播從完成處理程序引發的異常。 因此,您需要對它們進行適當處理以適合您的應用程序。
在許多情況下,這將是循環並重復run()
直到它退出而沒有錯誤。
在我們的代碼庫中,我有類似
static void m_asio_event_loop(boost::asio::io_service& svc, std::string name) {
// http://www.boost.org/doc/libs/1_61_0/doc/html/boost_asio/reference/io_service.html#boost_asio.reference.io_service.effect_of_exceptions_thrown_from_handlers
for (;;) {
try {
svc.run();
break; // exited normally
} catch (std::exception const &e) {
logger.log(LOG_ERR) << "[eventloop] An unexpected error occurred running " << name << " task: " << e.what();
} catch (...) {
logger.log(LOG_ERR) << "[eventloop] An unexpected error occurred running " << name << " task";
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.