繁体   English   中英

是否应该捕获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";
        }
    }
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM