2
0
mirror of https://github.com/boostorg/thread.git synced 2026-02-13 12:52:11 +00:00
[SVN r83995]
This commit is contained in:
Vicente J. Botet Escriba
2013-04-21 07:34:19 +00:00
parent 093a329c1a
commit e294e6bcc8
4 changed files with 117 additions and 4 deletions

View File

@@ -38,10 +38,35 @@ namespace boost
class strict_scoped_thread
{
thread t_;
struct dummy;
public:
BOOST_THREAD_NO_COPYABLE( strict_scoped_thread) /// non copyable
/*
*
*/
#if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template <class F, class ...Args>
explicit strict_scoped_thread(BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(Args)... args,
typename disable_if<is_same<typename decay<F>::type, thread>, dummy* >::type=0) :
t_(boost::forward<F>(f), boost::forward<Args>(args)...) {}
#else
template <class F>
explicit strict_scoped_thread(BOOST_THREAD_FWD_REF(F) f,
typename disable_if<is_same<typename decay<F>::type, thread>, dummy* >::type=0) :
t_(boost::forward<F>(f)) {}
template <class F, class A1>
strict_scoped_thread(BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(A1) a1) :
t_(boost::forward<F>(f), boost::forward<A1>(a1)) {}
template <class F, class A1, class A2>
strict_scoped_thread(BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(A1) a1, BOOST_THREAD_FWD_REF(A2) a2) :
t_(boost::forward<F>(f), boost::forward<A1>(a1), boost::forward<A2>(a2)) {}
template <class F, class A1, class A2, class A3>
strict_scoped_thread(BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(A1) a1, BOOST_THREAD_FWD_REF(A2) a2, BOOST_THREAD_FWD_REF(A3) a3) :
t_(boost::forward<F>(f), boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3)) {}
#endif
/**
* Constructor from the thread to own.
*
@@ -91,6 +116,7 @@ namespace boost
class scoped_thread
{
thread t_;
struct dummy;
public:
typedef thread::id id;
@@ -107,6 +133,31 @@ namespace boost
{
}
/**
*
*/
#if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template <class F, class ...Args>
explicit scoped_thread(BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(Args)... args,
typename disable_if<is_same<typename decay<F>::type, thread>, dummy* >::type=0) :
t_(boost::forward<F>(f), boost::forward<Args>(args)...) {}
#else
template <class F>
explicit scoped_thread(BOOST_THREAD_FWD_REF(F) f,
typename disable_if<is_same<typename decay<F>::type, thread>, dummy* >::type=0) :
t_(boost::forward<F>(f)) {}
template <class F, class A1>
scoped_thread(BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(A1) a1) :
t_(boost::forward<F>(f), boost::forward<A1>(a1)) {}
template <class F, class A1, class A2>
scoped_thread(BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(A1) a1, BOOST_THREAD_FWD_REF(A2) a2) :
t_(boost::forward<F>(f), boost::forward<A1>(a1), boost::forward<A2>(a2)) {}
template <class F, class A1, class A2, class A3>
scoped_thread(BOOST_THREAD_FWD_REF(F) f, BOOST_THREAD_FWD_REF(A1) a1, BOOST_THREAD_FWD_REF(A2) a2, BOOST_THREAD_FWD_REF(A3) a3) :
t_(boost::forward<F>(f), boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3)) {}
#endif
/**
* Constructor from the thread to own.
*
@@ -195,6 +246,11 @@ namespace boost
return t_.native_handle();
}
bool joinable() const BOOST_NOEXCEPT
{
return t_.joinable();
}
#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
void interrupt()
{