5 #include <condition_variable>
12 mutable std::mutex mutex_;
13 std::condition_variable cv_;
14 bool stopped_ =
false;
19 std::lock_guard<std::mutex> lock(mutex_);
21 queue_.push(std::move(item));
26 bool pop(T& item, std::chrono::milliseconds timeout = std::chrono::milliseconds(100)) {
27 std::unique_lock<std::mutex> lock(mutex_);
29 if (!cv_.wait_for(lock, timeout, [
this] {
30 return !queue_.empty() || stopped_;
35 if (stopped_ && queue_.empty()) {
39 item = std::move(queue_.front());
46 std::lock_guard<std::mutex> lock(mutex_);
53 std::lock_guard<std::mutex> lock(mutex_);
bool pop(T &item, std::chrono::milliseconds timeout=std::chrono::milliseconds(100))