boost::asio::io_service::run() によってスローされた例外の処理
boost::asio::io_service:: run() 関数は、エラーが発生すると boost::system::system_error 例外をスローします。このため、これらの例外を処理するかどうか、またどのように処理するかという問題が生じます。
例外の処理
はい、boost::asio::io_service によってスローされた例外を処理することが重要です。 ::走る()。ドキュメントで説明されているように、完了ハンドラーからスローされた例外は伝播されます。したがって、特定のアプリケーション要件に基づいて適切に処理する必要があります。
例:
提供されたコード内:
int main() { boost::asio::io_service queue; boost::asio::io_service::work work(queue); { // set some handlers... queue.run(); } // join some workers... return 0; }
ここでは、ハンドラーによってスローされた例外はキャッチされず、処理されません。例外を処理するには、ループを使用して、エラーが発生せずに終了するまで io_service を繰り返し実行できます。
ループと再試行:
以下は、その方法の例です。ループして、io_service がエラーなしで終了するまで再試行します:
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"; } } }
このコードは、 io_service は、正常に終了するかエラーが発生するまで継続されます。エラーの場合、例外をログに記録し、再試行します。
ドキュメント参照:
boost::asio:: による例外の処理の詳細については、 io_service については、次のドキュメント リンクを参照してください:
以上がboost::asio::io_service::run() によってスローされた例外を適切に処理する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。