File tree Expand file tree Collapse file tree 2 files changed +11
-7
lines changed Expand file tree Collapse file tree 2 files changed +11
-7
lines changed Original file line number Diff line number Diff line change 22#include " common.h"
33#include " sample.h"
44#include " send_buffer.h"
5- #include < boost/ chrono/duration.hpp >
5+ #include < chrono>
66
77using namespace lsl ;
88
@@ -26,6 +26,7 @@ void consumer_queue::push_sample(const sample_p &sample) {
2626 sample_p dummy;
2727 buffer_.pop (dummy);
2828 }
29+ cv_.notify_one ();
2930}
3031
3132sample_p consumer_queue::pop_sample (double timeout) {
@@ -34,12 +35,10 @@ sample_p consumer_queue::pop_sample(double timeout) {
3435 buffer_.pop (result);
3536 } else {
3637 if (!buffer_.pop (result)) {
37- // turn timeout into the point in time at which we give up
38- timeout += lsl::lsl_clock ();
39- do {
40- if (lsl::lsl_clock () >= timeout) break ;
41- lslboost::this_thread::sleep_for (lslboost::chrono::milliseconds (1 ));
42- } while (!buffer_.pop (result));
38+ // wait untill for a new sample until the thread calling push_sample delivers one, or until timeout
39+ std::unique_lock<std::mutex> lk (lock_);
40+ std::chrono::duration<double > sec (timeout);
41+ cv_.wait_for (lk, sec, [&]{ return this ->buffer_ .pop (result); });
4342 }
4443 }
4544 return result;
Original file line number Diff line number Diff line change 44#include " common.h"
55#include " forward.h"
66#include < boost/lockfree/spsc_queue.hpp>
7+ #include < mutex>
8+ #include < condition_variable>
79
810namespace lsl {
911/* *
@@ -43,6 +45,9 @@ class consumer_queue : private lslboost::noncopyable {
4345private:
4446 send_buffer_p registry_; // optional consumer registry
4547 buffer_type buffer_; // the sample buffer
48+ // used to wait for new samples
49+ std::mutex lock_;
50+ std::condition_variable cv_;
4651};
4752
4853} // namespace lsl
You can’t perform that action at this time.
0 commit comments