boost::asio::io_service::run() での例外のキャッチ
boost::asio の run() メソッドio_service クラスの は、エラーが発生した場合に boost::system::system_error 例外をスローする可能性があります。この例外を処理するかどうかを決定することは、アプリケーションが適切に機能するために重要です。
例外を処理する理由
ドキュメントには、完了ハンドラーからスローされた例外は伝播されると記載されています。 。したがって、アプリケーションに応じて run() によってスローされた例外を処理することをお勧めします。
推奨されるアプローチ
一般的なアプローチは、run() を繰り返し呼び出すことです。エラーなしで終了するまで。次のコード サンプルは、このアプローチを示しています。
static void m_asio_event_loop(boost::asio::io_service& svc, std::string name) { 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"; } } }
このコード スニペットは、ループ内の run() 例外の処理をカプセル化し、エラーなしで終了するまでイベント ループが実行し続けることを保証します。 io_service での例外の処理に関する詳細なドキュメントは、
以上がboost::asio::io_service::run() によってスローされた例外をキャッチする必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。