スレッド間での例外の伝播
はじめに:
マルチスレッド アプリケーションでは、次のことが重要です。例外を効果的に処理して、予期しないアプリケーションのクラッシュを防ぎます。複数のスレッドを使用する場合、ワーカー スレッドで発生した例外は処理のためにメイン スレッドに正常に伝播され、アプリケーションの安定性が確保される必要があります。
例外ポインタを使用した解決策:
C 11 では、スレッド境界を越えて例外を転送できるようにする例外ポインター (Exception_ptr) の概念が導入されました。例外ポインタは、例外オブジェクトへの共有ポインタ参照を保持します。以下に例を示します。
<code class="cpp">#include <thread> #include <exception> std::exception_ptr exceptionPtr; void workerThread() { try { // Perform some task with potential exceptions } catch(...) { exceptionPtr = std::current_exception(); } } int main() { std::thread worker(workerThread); worker.join(); if (exceptionPtr) { try { std::rethrow_exception(exceptionPtr); } catch (const std::exception& ex) { // Handle the exception on the main thread std::cerr << "Exception occurred on worker thread: " << ex.what() << "\n"; } } return 0; }</code>
このソリューションでは、例外ポインターがワーカー スレッド上に作成され、キャッチされた例外への参照が割り当てられます。次に、メインスレッドは例外ポインタが存在するかどうかを確認し、処理のために例外を再スローします。
注:
以上がC のスレッド間で例外を効果的に伝播する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。