Propagation des exceptions entre les threads
Introduction :
Dans les applications multithread, il est crucial de gérer efficacement les exceptions pour éviter les plantages inattendus des applications. Lorsque vous travaillez avec plusieurs threads, les exceptions qui se produisent sur les threads de travail doivent être propagées de manière gracieuse au thread principal pour être traitées, garantissant ainsi que l'application reste stable.
Solution utilisant des pointeurs d'exception :
C 11 a introduit le concept de pointeurs d'exception (exception_ptr), qui permettent de transporter les exceptions au-delà des limites des threads. Les pointeurs d'exception contiennent une référence de pointeur partagée vers l'objet d'exception. Voici un exemple :
<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>
Dans cette solution, le pointeur d'exception est créé sur le thread de travail et une référence à l'exception interceptée est attribuée. Le thread principal vérifie ensuite si un pointeur d'exception existe et renvoie l'exception pour la gestion.
Remarque :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!