boost::asio::io_service::run() によってスローされた例外は捕捉されるべきですか?
問題:
boost::asio::io_service::run()実行中にエラーが発生した場合は、boost::system::system_error 例外をスローできます。この例外を処理する必要があるかどうかを検討することが重要です。
答え:
はい、例外は処理される必要があります。
説明:
ブーストのドキュメントによると、完了ハンドラーからスローされる例外は次のとおりです。伝播した。したがって、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 中国語 Web サイトの他の関連記事を参照してください。