/* VIM: let b:lcppflags="-std=c++11 -O2 -pthread" VIM: let b:wcppflags="/O2 /EHsc /DWIN32" VIM: let b:cppflags=g:Iboost.g:Itbb VIM: let b:ldflags=g:Lboost.g:Ltbb VIM: let b:ldlibpath=g:Bboost.g:Btbb VIM: let b:argv="" */ #include #include #include #include #include "tbb/flow_graph.h" using namespace tbb::flow; typedef std::shared_ptr msg_type; struct body { std::string my_name; body( const char *name ) : my_name(name) {} void operator()( msg_type msg ) const { std::stringstream ss; ss << my_name << " got " << *msg << std::endl; std::cout << ss.str(); } }; int main() {try{ graph g; broadcast_node start( g ); continue_node a( g, body("A")); continue_node b( g, body("B")); continue_node c( g, body("C")); continue_node d( g, body("D")); continue_node e( g, body("E")); make_edge( start, a ); make_edge( start, b ); make_edge( a, c ); make_edge( b, c ); make_edge( c, d ); make_edge( a, e ); for (int i = 0; i < 3; ++i ) { std::stringstream ss; ss << i << std::endl; start.try_put( std::make_shared( ss.str() ) ); g.wait_for_all(); } return 0; } catch ( const std::exception& e ) { std::cerr << std::endl << "std::exception(\"" << e.what() << "\")." << std::endl; return 2; } catch ( ... ) { std::cerr << std::endl << "unknown exception." << std::endl; return 1; }}