Boost logo

Boost :

Subject: Re: [boost] [thread] Exception propagation for thread::join
From: Anthony Williams (anthony.ajw_at_[hidden])
Date: 2009-05-18 06:10:03


Emil Dotchevski <emil_at_[hidden]> writes:

> When joining a thread, in case the thread has exited, I find it
> convenient to have any exception the thread function throws propagated
> to the caller of join(). Just as an illustration of what I'm talking
> about, below is my Win32 implementation of a similar interface. An
> interesting design decision is what to do if a detached thread throws
> an exception. Note the line marked with (1) -- I've decided to assert
> in this case (instead of ignoring the exception, which would be the
> alternative behavior.)
>
> Would something similar be a good addition to Boost Thread?

No. You can easily write code that does this using a wrapper, as you
have shown for the win32 API. The futures and packaged_task stuff that I
will be merging with boost.thread soon will provide such a wrapper that
also allows return values from thread functions.

This provides people with a choice --- have the exception terminate the
program (and allow a debugger to catch it) which is the default, or
allow the exception to propagate by using a packaged_task+future.

Anthony

-- 
Author of C++ Concurrency in Action | http://www.manning.com/williams
just::thread C++0x thread library   | http://www.stdthread.co.uk
Just Software Solutions Ltd         | http://www.justsoftwaresolutions.co.uk
15 Carrallack Mews, St Just, Cornwall, TR19 7UL, UK. Company No. 5478976

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk