123456789101112131415161718192021222324252627282930313233343536373839 |
- //Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
- //Distributed under the Boost Software License, Version 1.0. (See accompanying
- //file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- //This example shows how to transport cloning-enabled boost::exceptions between threads.
- #include <boost/exception_ptr.hpp>
- #include <boost/thread.hpp>
- #include <boost/bind.hpp>
- void do_work(); //throws cloning-enabled boost::exceptions
- void
- worker_thread( boost::exception_ptr & error )
- {
- try
- {
- do_work();
- error = boost::exception_ptr();
- }
- catch(
- ... )
- {
- error = boost::current_exception();
- }
- }
- // ...continued
- void
- work()
- {
- boost::exception_ptr error;
- boost::thread t( boost::bind(worker_thread,boost::ref(error)) );
- t.join();
- if( error )
- boost::rethrow_exception(error);
- }
|