Bytemaster's Boost Libraries
|
00001 #ifndef _BOOST_CMT_SIGNALS_HPP 00002 #define _BOOST_CMT_SIGNALS_HPP 00003 #include <boost/signal.hpp> 00004 #include <boost/cmt/task.hpp> 00005 00006 namespace boost { namespace cmt { 00007 template<typename T> 00008 T wait( boost::signal<void(T)>& sig, const microseconds& timeout_us=microseconds::max() ) { 00009 typename promise<T>::ptr p(new promise<T>()); 00010 boost::signals::scoped_connection c = sig.connect( boost::bind(&promise<T>::set_value,p,_1) ); 00011 return p->wait( timeout_us ); 00012 } 00013 00014 void wait( boost::signal<void()>& sig, const microseconds& timeout_us=microseconds::max() ) { 00015 promise<void_t>::ptr p(new promise<void_t>()); 00016 boost::signals::scoped_connection c = sig.connect( boost::bind(&promise<void_t>::set_value,p,void_t()) ); 00017 p->wait( timeout_us ); 00018 } 00019 } } 00020 00021 #endif