23#include <QWaitCondition>
24#include <QMutexLocker>
89 std::deque<T> m_queue;
92 mutable QMutex m_mutex;
93 QWaitCondition m_notEmptyCondition;
94 QWaitCondition m_notFullCondition;
103 , m_notEmptyCondition()
104 , m_notFullCondition()
117 if (m_queue.size() == m_maxSize) {
119 case OverflowModeDiscardOldest:
121 m_queue.push_back(item);
123 case OverflowModeDiscardNewest:
126 case OverflowModeWait:
127 m_notFullCondition.wait(&m_mutex);
128 m_queue.push_back(item);
132 m_queue.push_back(item);
133 if (m_queue.size() == 1) {
134 m_notEmptyCondition.wakeOne();
145 if (m_queue.size() == 0) {
146 m_notEmptyCondition.wait(&m_mutex);
148 retVal = m_queue.front();
150 if (m_mode == OverflowModeWait && m_queue.size() == m_maxSize - 1) {
151 m_notFullCondition.wakeOne();
160 QMutexLocker locker(&m_mutex);
161 return m_queue.size();
The DataQueue provides a thread safe container for passing data between objects.
Definition dataqueue.h:49
OverflowMode
Overflow behavior modes.
Definition dataqueue.h:52
@ OverflowModeWait
Wait for space to be free.
Definition dataqueue.h:55
@ OverflowModeDiscardNewest
Discard newest items.
Definition dataqueue.h:54
@ OverflowModeDiscardOldest
Discard oldest items.
Definition dataqueue.h:53
DataQueue(int maxSize, OverflowMode mode)
Definition dataqueue.h:98
T pop()
Definition dataqueue.h:141
int count() const
Returns the number of items in the queue.
Definition dataqueue.h:158
virtual ~DataQueue()
Destructs a DataQueue.
Definition dataqueue.h:109
void push(const T &item)
Definition dataqueue.h:114