6dad044ab7
[SVN r83548]
53 lines
1.1 KiB
C++
53 lines
1.1 KiB
C++
// Copyright (C) 2010 Vicente Botet
|
|
//
|
|
// 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)
|
|
|
|
#define BOOST_THREAD_PROVIDES_INTERRUPTIONS
|
|
|
|
#include <iostream>
|
|
#include <boost/thread/thread_only.hpp>
|
|
#include <boost/date_time/posix_time/posix_time_types.hpp>
|
|
#include <boost/thread/future.hpp>
|
|
|
|
using namespace boost::posix_time;
|
|
using namespace boost;
|
|
|
|
int foo()
|
|
{
|
|
this_thread::sleep(seconds(10));
|
|
return 0;
|
|
}
|
|
|
|
|
|
int main()
|
|
{
|
|
boost::packaged_task<int> pt(&foo);
|
|
boost::unique_future<int> fi = pt.get_future();
|
|
boost::thread task(boost::move(pt)); // launch task on a thread
|
|
|
|
task.interrupt();
|
|
|
|
try
|
|
{
|
|
int v = fi.get();
|
|
}
|
|
catch (boost::thread_interrupted& exc)
|
|
{
|
|
std::cout << "OK: " << std::endl;
|
|
return 0;
|
|
}
|
|
catch (boost::exception& exc)
|
|
{
|
|
std::cout << __LINE__ << " ERROR: " << boost::diagnostic_information(exc) << std::endl;
|
|
return 1;
|
|
}
|
|
catch (...)
|
|
{
|
|
std::cout << __LINE__ << " ERROR: " << std::endl;
|
|
return 2;
|
|
}
|
|
std::cout << __LINE__ << " ERROR: " << std::endl;
|
|
return 3;
|
|
}
|