Menyebarkan Pengecualian Antara Benang
Pengenalan:
Dalam aplikasi berbilang benang, adalah penting untuk mengendalikan pengecualian dengan berkesan untuk mengelakkan ranap aplikasi yang tidak dijangka. Apabila bekerja dengan berbilang utas, pengecualian yang berlaku pada utas pekerja hendaklah disebarkan kembali ke utas utama untuk dikendalikan, memastikan aplikasi kekal stabil.
Penyelesaian Menggunakan Penunjuk Pengecualian:
C 11 memperkenalkan konsep penuding pengecualian (exception_ptr), yang membenarkan pengecualian diangkut merentasi sempadan benang. Penunjuk pengecualian memegang rujukan penuding yang dikongsi kepada objek pengecualian. Berikut ialah contoh:
<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>
Dalam penyelesaian ini, penuding pengecualian dibuat pada urutan pekerja dan memberikan rujukan kepada pengecualian yang ditangkap. Urutan utama kemudian menyemak sama ada penuding pengecualian wujud dan melemparkan semula pengecualian untuk pengendalian.
Nota:
Atas ialah kandungan terperinci Bagaimana untuk Menyebarkan Pengecualian Antara Benang dalam C dengan Berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!