// (C) Copyright 2009-2012 Anthony Williams // (C) Copyright 2012 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) #if __cplusplus < 201103L int main() { return 0; } #else #define BOOST_THREAD_VERSION 3 #include #include #include void do_something(int& i) { ++i; } void f(int, int) { } struct func { int& i; func(int& i_) : i(i_) { } void operator()() { for (unsigned j = 0; j < 1000000; ++j) { do_something(i); } } }; void do_something_in_current_thread() { } //void do_something_with_current_thread(std::thread&& th) //{ // th.join(); //} using strict_scoped_thread = boost::strict_scoped_thread; using scoped_thread = boost::scoped_thread; int main() { { int some_local_state; strict_scoped_thread t( (std::thread(func(some_local_state)))); do_something_in_current_thread(); } { int some_local_state; std::thread t(( func(some_local_state) )); strict_scoped_thread g( (boost::move(t)) ); do_something_in_current_thread(); } // { // int some_local_state; // std::thread t(( func(some_local_state) )); // strict_scoped_thread g( (boost::move(t)) ); // // do_something_in_current_thread(); // do_something_with_current_thread(std::thread(g)); // } { int some_local_state; scoped_thread t( (std::thread(func(some_local_state)))); if (t.joinable()) t.join(); else do_something_in_current_thread(); } { int some_local_state; std::thread t(( func(some_local_state) )); scoped_thread g( (std::move(t)) ); g.detach(); do_something_in_current_thread(); } { scoped_thread g( &f, 1, 2 ); do_something_in_current_thread(); } return 0; } #endif