mirror of
https://github.com/boostorg/exception.git
synced 2025-07-16 05:52:14 +02:00
boost exception
[SVN r43485]
This commit is contained in:
39
example/cloning_2.cpp
Normal file
39
example/cloning_2.cpp
Normal file
@ -0,0 +1,39 @@
|
||||
//Copyright (c) 2006-2008 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/cloning.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(
|
||||
boost::exception & e )
|
||||
{
|
||||
error = boost::clone_exception(e);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
void
|
||||
work()
|
||||
{
|
||||
boost::exception_ptr error;
|
||||
boost::thread t( boost::bind(worker_thread,boost::ref(error)) );
|
||||
t.join();
|
||||
if( error )
|
||||
boost::rethrow_exception(error);
|
||||
}
|
Reference in New Issue
Block a user