diff options
Diffstat (limited to 'gnuradio-runtime/lib/scheduler_tpb.cc')
-rw-r--r-- | gnuradio-runtime/lib/scheduler_tpb.cc | 87 |
1 files changed, 38 insertions, 49 deletions
diff --git a/gnuradio-runtime/lib/scheduler_tpb.cc b/gnuradio-runtime/lib/scheduler_tpb.cc index fe593670f8..a255aa4946 100644 --- a/gnuradio-runtime/lib/scheduler_tpb.cc +++ b/gnuradio-runtime/lib/scheduler_tpb.cc @@ -31,32 +31,34 @@ namespace gr { - class tpb_container - { +class tpb_container +{ block_sptr d_block; int d_max_noutput_items; thread::barrier_sptr d_start_sync; - public: - tpb_container(block_sptr block, int max_noutput_items, thread::barrier_sptr start_sync) - : d_block(block), d_max_noutput_items(max_noutput_items), d_start_sync(start_sync) {} +public: + tpb_container(block_sptr block, + int max_noutput_items, + thread::barrier_sptr start_sync) + : d_block(block), d_max_noutput_items(max_noutput_items), d_start_sync(start_sync) + { + } void operator()() { - tpb_thread_body body(d_block, d_start_sync, d_max_noutput_items); + tpb_thread_body body(d_block, d_start_sync, d_max_noutput_items); } - }; +}; - scheduler_sptr - scheduler_tpb::make(flat_flowgraph_sptr ffg, int max_noutput_items) - { +scheduler_sptr scheduler_tpb::make(flat_flowgraph_sptr ffg, int max_noutput_items) +{ return scheduler_sptr(new scheduler_tpb(ffg, max_noutput_items)); - } +} - scheduler_tpb::scheduler_tpb(flat_flowgraph_sptr ffg, - int max_noutput_items) +scheduler_tpb::scheduler_tpb(flat_flowgraph_sptr ffg, int max_noutput_items) : scheduler(ffg, max_noutput_items) - { +{ int block_max_noutput_items; // Get a topologically sorted vector of all the blocks in use. @@ -69,48 +71,35 @@ namespace gr { // Ensure that the done flag is clear on all blocks - for(size_t i = 0; i < blocks.size(); i++) { - blocks[i]->detail()->set_done(false); + for (size_t i = 0; i < blocks.size(); i++) { + blocks[i]->detail()->set_done(false); } thread::barrier_sptr start_sync = - boost::make_shared<thread::barrier>(blocks.size()+1); + boost::make_shared<thread::barrier>(blocks.size() + 1); // Fire off a thead for each block - for(size_t i = 0; i < blocks.size(); i++) { - std::stringstream name; - name << "thread-per-block[" << i << "]: " << blocks[i]; - - // If set, use internal value instead of global value - if(blocks[i]->is_set_max_noutput_items()) { - block_max_noutput_items = blocks[i]->max_noutput_items(); - } - else { - block_max_noutput_items = max_noutput_items; - } - d_threads.create_thread(thread::thread_body_wrapper<tpb_container>( - tpb_container(blocks[i], block_max_noutput_items, start_sync), - name.str())); + for (size_t i = 0; i < blocks.size(); i++) { + std::stringstream name; + name << "thread-per-block[" << i << "]: " << blocks[i]; + + // If set, use internal value instead of global value + if (blocks[i]->is_set_max_noutput_items()) { + block_max_noutput_items = blocks[i]->max_noutput_items(); + } else { + block_max_noutput_items = max_noutput_items; + } + d_threads.create_thread(thread::thread_body_wrapper<tpb_container>( + tpb_container(blocks[i], block_max_noutput_items, start_sync), name.str())); } start_sync->wait(); - } - - scheduler_tpb::~scheduler_tpb() - { - stop(); - } - - void - scheduler_tpb::stop() - { - d_threads.interrupt_all(); - } - - void - scheduler_tpb::wait() - { - d_threads.join_all(); - } +} + +scheduler_tpb::~scheduler_tpb() { stop(); } + +void scheduler_tpb::stop() { d_threads.interrupt_all(); } + +void scheduler_tpb::wait() { d_threads.join_all(); } } /* namespace gr */ |