簡體   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