c++ - 是否应该捕获 boost::asio::io_service::run() 抛出的异常?

标签 c++ boost exception boost-asio

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";
        }
    }
}

这是文档链接 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

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

相关文章:

c++ - boost::accumulators 中的 moment<2> 是什么意思

c++ - ioService.post(boost::bind(&myFunction, this, attr1, attri2) 不发布工作

c++ - 类成员的typedef

c++ - 有什么方法可以处理从 c++ 中调用的 c# exe 抛出的异常?

java - 给定算法分析的"main"java.lang.StackOverflowError

c++ - QT.pro 文件 : How to change default include path for MAC frameworks

c++ - fatal error 和非 fatal error 的区别

c++ - 使用 mmap 映射文件中的不同段

c++ - 如何为相等的模板参数类型专门化/重载函数?

java - 如何编写链式异常 Java 类