Skip to content

Commit 4bfec09

Browse files
committed
improve efficiency while waiting for new samples
1 parent b1f0917 commit 4bfec09

File tree

2 files changed

+11
-7
lines changed

2 files changed

+11
-7
lines changed

src/consumer_queue.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#include "common.h"
33
#include "sample.h"
44
#include "send_buffer.h"
5-
#include <boost/chrono/duration.hpp>
5+
#include <chrono>
66

77
using 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

3132
sample_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;

src/consumer_queue.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
#include "common.h"
55
#include "forward.h"
66
#include <boost/lockfree/spsc_queue.hpp>
7+
#include <mutex>
8+
#include <condition_variable>
79

810
namespace lsl {
911
/**
@@ -43,6 +45,9 @@ class consumer_queue : private lslboost::noncopyable {
4345
private:
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

0 commit comments

Comments
 (0)