#ifndef _FC_SIGNALS_HPP #define _FC_SIGNALS_HPP #include #include #include #include namespace fc { #if !defined(BOOST_NO_TEMPLATE_ALIASES) template using signal = boost::signal; #else #endif template inline T wait( boost::signal& sig, const microseconds& timeout_us=microseconds::max() ) { typename promise::ptr p(new promise()); boost::signals::scoped_connection c = sig.connect( [=]( T t ) { p->set_value(t); } ); return p->wait( timeout_us ); } inline void wait( boost::signal& sig, const microseconds& timeout_us=microseconds::max() ) { promise::ptr p(new promise()); boost::signals::scoped_connection c = sig.connect( [=]() { p->set_value(); } ); p->wait( timeout_us ); } } #endif