1 // Copyright (C) 2010 Vicente Botet 2 // 3 // Distributed under the Boost Software License, Version 1.0. (See accompanying 4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 5 6 #define BOOST_THREAD_PROVIDES_INTERRUPTIONS 7 8 #include <iostream> 9 #include <boost/thread/thread_only.hpp> 10 #include <boost/date_time/posix_time/posix_time_types.hpp> 11 #include <boost/thread/future.hpp> 12 13 using namespace boost::posix_time; 14 using namespace boost; 15 foo()16int foo() 17 { 18 this_thread::sleep(seconds(10)); 19 return 0; 20 } 21 22 main()23int main() 24 { 25 boost::packaged_task<int> pt(&foo); 26 boost::unique_future<int> fi = pt.get_future(); 27 boost::thread task(boost::move(pt)); // launch task on a thread 28 29 task.interrupt(); 30 31 try 32 { 33 int v = fi.get(); 34 } 35 catch (boost::thread_interrupted& exc) 36 { 37 std::cout << "OK: " << std::endl; 38 return 0; 39 } 40 catch (boost::exception& exc) 41 { 42 std::cout << __LINE__ << " ERROR: " << boost::diagnostic_information(exc) << std::endl; 43 return 1; 44 } 45 catch (...) 46 { 47 std::cout << __LINE__ << " ERROR: " << std::endl; 48 return 2; 49 } 50 std::cout << __LINE__ << " ERROR: " << std::endl; 51 return 3; 52 } 53