23 #include "aqt_vision_threads.h"
25 #include <core/threading/barrier.h>
26 #include <utils/time/clock.h>
27 #include <aspect/vision.h>
31 using namespace fawkes;
49 _empty_time =
new Time();
56 cyclic_barrier =
new Barrier(1);
64 delete cyclic_barrier;
66 delete running_threads_cyclic;
67 delete running_threads_cont;
68 delete waiting_threads;
81 waiting_threads->push_back_locked(thread);
92 if ( find(waiting_threads->begin(), waiting_threads->end(), thread) != waiting_threads->end()) {
94 running_threads_cyclic->push_back_locked(thread);
95 delete cyclic_barrier;
96 cyclic_barrier =
new Barrier( running_threads_cyclic->size() + 1 );
98 running_threads_cont->push_back_locked(thread);
100 waiting_threads->remove_locked(thread);
112 waiting_threads->remove_locked(thread);
113 if ( find(running_threads_cyclic->begin(), running_threads_cyclic->end(), thread) !=
114 running_threads_cyclic->end()) {
116 running_threads_cyclic->remove_locked(thread);
118 delete cyclic_barrier;
119 cyclic_barrier =
new Barrier( running_threads_cyclic->size() + 1 );
121 running_threads_cont->remove_locked(thread);
134 waiting_threads->remove_locked(thread);
147 return ( ! running_threads_cyclic->empty() );
158 return (find(waiting_threads->begin(), waiting_threads->end(), t) != waiting_threads->end());
169 return ( waiting_threads->empty() &&
170 running_threads_cyclic->empty() &&
171 running_threads_cont->empty() );
181 return clock->
elapsed(_empty_time);
189 if ( has_cyclic_thread() ) {
190 running_threads_cyclic->wakeup(cyclic_barrier);
191 cyclic_barrier->wait();
208 running_threads_cyclic->set_prepfin_hold(hold);
210 running_threads_cyclic->set_prepfin_hold(
false);