1 #ifndef BLOCKING_QUEUE_H
2 #define BLOCKING_QUEUE_H
4 #include <condition_variable>
14 virtual const char* what()
const noexcept {
15 return "Se cerrĂ³ la queue bloqueante";
26 std::condition_variable cond_var;
30 bool meets_deplete_cond()
const {
31 return wait_depleted ? queue.empty() :
true;
38 : queue(other.queue), _is_closed(other._is_closed) {}
41 queue = std::queue<T>(other.queue);
42 _is_closed = other._is_closed;
47 queue = std::move(other.queue);
48 _is_closed = other._is_closed;
49 other._is_closed =
true;
52 bool is_empty()
const {
57 std::unique_lock<std::mutex> lock(mutex);
59 cond_var.notify_all();
63 std::unique_lock<std::mutex> lock(mutex);
64 while (queue.empty()) {
77 void close(
bool deplete =
true) {
78 std::unique_lock<std::mutex> lock(mutex);
79 wait_depleted = deplete;
81 cond_var.notify_all();
84 bool is_closed()
const {
85 return _is_closed && meets_deplete_cond();
91 #endif // BLOCKING_QUEUE_H