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";
}
}
}
关于c++ - 是否应该捕获 boost::asio::io_service::run() 抛出的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44500818/