
Hi folks. Apologies if this has been discussed frequently before. I'm puzzled as to why the boost.thread thread_proxy function catches all exceptions and then quietly ends the thread. For example:- class MyThreadFunctor { public: void operator()() const { // Do some processing... throw very_bad_exception(); // ...never get to do some processing. } }; int main(int argc, char * argv[]) { MyThreadFunctor my_functor; boost::thread my_thread(my_functor); // Do lots of processing and then join to my_thread. // ... } In boost 1.32, the exception that is thrown in the created thread is caught in the library's thread_proxy function and then the thread exits quietly. Is there a compelling reason for this behaviour?
From my point of view, it seems more flexible to not catch exceptions in the thread_proxy function. If I wanted to, I could still get the current behaviour by putting a try/catch-all block in the operator() function.
I would have expected the normal C++ uncaught exception actions (i.e. calling terminate()) to occur if an exception is thrown out of the user provided thread code. I noticed this when (oh horror!) an error in my code threw an exception out of operator(). I could have identified where the problem was from the core file or Dr Watson log that would have been created if the exception had not been caught by thread_proxy(). Am I missing something obvious here? Thanks, Adrian.
participants (1)
-
Adrian Mawbey