24 #include <QWaitCondition> 25 #include <QMutexLocker> 63 explicit DataQueue(
int maxSize, OverflowMode mode);
74 void push(
const T& item);
91 mutable QMutex m_mutex;
92 QWaitCondition m_notEmptyCondition;
93 QWaitCondition m_notFullCondition;
101 , m_mutex(QMutex::NonRecursive)
102 , m_notEmptyCondition()
103 , m_notFullCondition()
116 if (m_queue.size() == m_maxSize) {
119 m_queue.removeFirst();
120 m_queue.append(item);
126 m_notFullCondition.wait(&m_mutex);
127 m_queue.append(item);
131 m_queue.append(item);
132 if (m_queue.size() == 1) {
133 m_notEmptyCondition.wakeOne();
144 if (m_queue.size() == 0) {
145 m_notEmptyCondition.wait(&m_mutex);
147 retVal = m_queue.takeFirst();
149 m_notFullCondition.wakeOne();
158 QMutexLocker locker(&m_mutex);
159 return m_queue.size();
162 #endif // DATAQUEUE_H Wait for space to be free.
Definition: dataqueue.h:54
DataQueue(int maxSize, OverflowMode mode)
Definition: dataqueue.h:97
void push(const T &item)
Definition: dataqueue.h:113
The DataQueue provides a thread safe container for passing data between objects.
Definition: dataqueue.h:47
Discard newest items.
Definition: dataqueue.h:53
Discard oldest items.
Definition: dataqueue.h:52
OverflowMode
Overflow behavior modes.
Definition: dataqueue.h:51
T pop()
Definition: dataqueue.h:140
int count() const
Returns the number of items in the queue.
Definition: dataqueue.h:156
virtual ~DataQueue()
Destructs a DataQueue.
Definition: dataqueue.h:108