diff --git a/Concurrency/Queue/Queue.h b/Concurrency/Queue/Queue.h index 854851e..933e2fc 100644 --- a/Concurrency/Queue/Queue.h +++ b/Concurrency/Queue/Queue.h @@ -39,6 +39,19 @@ class Queue item = queue_.front(); queue_.pop(); } + + template + bool tryPop(T& item, const std::chrono::duration& timeout) + { + std::unique_lock mlock(mutex_); + if (queue_.empty() && cond_.wait_for(mlock, timeout) == std::cv_status::timeout) + { + return false; + } + item = queue_.front(); + queue_.pop(); + return true; + } void push(const T& item) {