|
Boost : |
From: Eric Woodruff (Eric.Woodruff_at_[hidden])
Date: 2002-08-05 13:18:58
William,
1. Define "not properly handled" in your first point. If the thread supports exceptions robustly, then the exception is handled and there is no reason to call terminate ().
2. Nobody said the process continued when an exception by a thread was unhandled. I stated that bad_exception was thrown, but the process still exited. It can trivially be user defined whether to throw bad_exception or to call terminate (). In any event, if it does throw bad_exception, and that exception is not caught, terminate is called.
----- Original Message -----
From: William E. Kempf
Newsgroups: gmane.comp.lib.boost.devel
Sent: Monday, 2002:August:05 2:04 PM
Subject: Re: Re: Threads & Exceptions
----- Original Message -----
From: "Eric Woodruff" <Eric.Woodruff_at_[hidden]>
To: <boost_at_[hidden]>
Sent: Monday, August 05, 2002 12:33 PM
Subject: [boost] Re: Threads & Exceptions
>Eric Woodruff
----------------------------------------------------------------------------
----
"Let me see if I understand your fist sentence (since it doesn't appear to
be
illustrated by the following code). If the user's thread throws one of the
"allowed" exceptions and some code then calls, say, boost::thread::join()
then join will throw the exception originally thrown in the thread? That
doesn't sound usable, let alone implementable."
See my attached implementation (that had to provide some
hacking/"configuring" to get it to work with my version CodeWarrior).
There is no reason for the entire application should exit upon an exception
in a thread--that is the most un-robust soltion possible.
<Eric Woodruff
It's the only solution that's consistent with standard behavior, and it
truly causes no significant problems in usage. If you want different
behavior simply create a wrapper class for the function objects.
boost::thread thread(my_exception_handler(&my_thread_func));
>Eric Woodruff
The only argument I can see against supporting the thread exceptions is that
the entire boost community (and I) are against exception specifications, but
as far as I can tell, it is the only way to implement them (while
abstracting the implementer of the thread function from the details
thread_throw, which otherwise makes the threaded function non-generic/thread
specific).
<Eric Woodruff
There are several points here:
* Need for consistency with the standard behavior for exception handling.
This dictates the call to terminate() for an exception that's not properly
handled.
* Need for safety. If an unhandled exception occurs within a thread it may
well not be safe to let the process continue. Being able to query a thread
object to see if the thread of execution was terminated by an uncaught
exception can help here, but it's error prone. Forcing the use of normal
exception handling techniques will create the fewest misuses by the user.
Bill Kempf
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk