23 #include <QMutexLocker>
24 #include <QWaitCondition>
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()
115 if (m_queue.size() == m_maxSize) {
117 case OverflowModeDiscardOldest:
119 m_queue.push_back(item);
121 case OverflowModeDiscardNewest:
124 case OverflowModeWait:
125 m_notFullCondition.wait(&m_mutex);
126 m_queue.push_back(item);
130 m_queue.push_back(item);
131 if (m_queue.size() == 1) {
132 m_notEmptyCondition.wakeOne();
143 if (m_queue.size() == 0) {
144 m_notEmptyCondition.wait(&m_mutex);
146 retVal = m_queue.front();
148 if (m_mode == OverflowModeWait && m_queue.size() == m_maxSize - 1) {
149 m_notFullCondition.wakeOne();
158 QMutexLocker locker(&m_mutex);
159 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:139
int count() const
Returns the number of items in the queue.
Definition: dataqueue.h:156
virtual ~DataQueue()
Destructs a DataQueue.
Definition: dataqueue.h:108
void push(const T &item)
Definition: dataqueue.h:112