Bytemaster's Boost Libraries
/Users/dlarimer/dev/libs/cmt/include/boost/cmt/signals.hpp
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
 All Classes Namespaces Files Functions Variables Typedefs Defines