kann man throw in threads (ausserhalb des threads) mit catch abfangen ?
-
Hi,
wenn in einem Thread eine Exception geworfen wird, wie kann ich das (ausserhalb des threads) mit catch abfangen ?
Weil wie im Code-Beispiel geht es nicht, das Programm beendet sich nach der Thread-Exception einfach unsanft mit:
"terminate called after throwing an instance of 'char const*'"using namespace std; #include <iostream> #include <pthread.h> void * threadFunction (void * param) { throw "thread-exception"; } int main () { try { pthread_t p; pthread_create (&p, NULL, threadFunction, NULL); } catch(...) { cout << "catch thread exception" << endl; } return 0; }
-
eine nicht gefangene exception in einem thread ist wie eine in nicht gefangene in main, d.h. du musst sie in dem thread fangen
boost::exception ist da evtl auch noch einen blick wert, ich weiß aber nicht wie weit das geht
-
DrGreenthumb schrieb:
boost::exception ist da evtl auch noch einen blick wert, ich weiß aber nicht wie weit das geht
Die haben bereits folgende Erweiterung für C++0x implementiert:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html
http://www.boost.org/doc/libs/1_42_0/libs/exception/doc/tutorial_exception_ptr.htmlDamit kann man dann in dem Thread die Exception fangen und in einen anderen Thread kopieren und dort wieder werfen. Das dürfte ja genau das sein, was der Op sucht.