From 7b3f18becde1f2bffa7b323124d717375863dfd5 Mon Sep 17 00:00:00 2001 From: Oliver Kowalke Date: Sun, 28 Dec 2014 08:06:43 +0100 Subject: [PATCH] improve test related to futures --- test/test_futures_mt.cpp | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/test/test_futures_mt.cpp b/test/test_futures_mt.cpp index 5bdee557..8bdbba03 100644 --- a/test/test_futures_mt.cpp +++ b/test/test_futures_mt.cpp @@ -11,26 +11,38 @@ #include #include -#include #include -typedef std::shared_ptr< boost::fibers::packaged_task< int() > > packaged_task_t; +template< typename T > +class rref { +public: + rref( T && t_) : + t( std::move( t_) ) { + } + + rref( rref & other) : + t( std::move( other.t) ) { + } + + rref( rref && other) : + t( std::move( other.t) ) { + } + + rref( rref const& other) = delete; + rref & operator=( rref const& other) = delete; + + T t; +}; int fn( int i) { return i; } -void exec( packaged_task_t pt) -{ - boost::fibers::fiber( std::move( * pt) ).join(); -} - boost::fibers::future< int > async( int i) { - packaged_task_t pt( - new boost::fibers::packaged_task< int() >( - std::bind( fn, i) ) ); - boost::fibers::future< int > f( pt->get_future() ); - std::thread( std::bind( exec, pt) ).detach(); + boost::fibers::packaged_task< int() > pt( std::bind( fn, i) ); + boost::fibers::future< int > f( pt.get_future() ); + rref< boost::fibers::packaged_task< int() > > rr( std::move( pt) ); + std::thread( [=] () mutable { boost::fibers::fiber( std::move( rr.t) ).join(); } ).detach(); return std::move( f); }