boost::asio::io_service::run() 是否应该抛出异常发现了吗?
问题:
boost::asio::io_service::run() 可能会抛出 boost::system::system_error 异常,如果执行过程中出现错误。考虑是否应该处理此异常很重要。
答案:
是的,应该处理该异常。
解释:
根据 boost 文档,完成处理程序抛出的异常是传播。因此,应针对特定应用程序适当处理 run() 引发的异常。
在许多情况下,建议循环并重复 run() 直到它退出且没有错误。这可以确保连续运行,除非发生不可恢复的错误。
处理代码示例:
处理循环中 run() 抛出的异常的示例:
void asio_event_loop(boost::asio::io_service& svc, std::string name) { while (true) { try { svc.run(); break; } catch (std::exception const &e) { std::cout << "[eventloop] An unexpected error occurred running " << name << " task: " << e.what() << std::endl; } catch (...) { std::cout << "[eventloop] An unexpected error occurred running " << name << " task" << std::endl; } } }
文档链接:
有关更多信息,请参阅 Boost 文档: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
以上是你应该捕获 boost::asio::io_service::run() 抛出的异常吗?的详细内容。更多信息请关注PHP中文网其他相关文章!