2 #ifndef _YI_CONCURRENT_QUEUE_H_ 3 #define _YI_CONCURRENT_QUEUE_H_ 21 template<
typename YI_DATA>
29 : m_bStopWaiting(false)
37 : m_bStopWaiting(false)
40 m_queue = other.m_queue;
50 m_queue = rhs.m_queue;
57 void Push(
const YI_DATA &rData)
72 while (!m_queue.empty())
74 m_EmptyCondition.
Wait(m_mutex);
84 return m_queue.empty();
93 bool bSuccessfulLock =
false;
99 rValue = m_queue.front();
102 bSuccessfulLock =
true;
113 return bSuccessfulLock;
127 while(m_queue.empty() && !m_bStopWaiting)
129 m_AvailableCondition.
Wait(m_mutex);
132 m_bStopWaiting =
false;
134 if (!m_queue.empty())
136 rValue = m_queue.front();
159 m_bStopWaiting =
true;
160 m_AvailableCondition.
WakeOne();
164 std::queue<YI_DATA> m_queue;
175 #endif // _YI_CONCURRENT_QUEUE_H_
Definition: YiMutex.h:110
bool Empty() const
Definition: YiConcurrentQueue.h:81
void StopWaiting()
Definition: YiConcurrentQueue.h:155
void WaitEmpty()
Definition: YiConcurrentQueue.h:69
void Push(const YI_DATA &rData)
Definition: YiConcurrentQueue.h:57
CYIConcurrentQueue()
Definition: YiConcurrentQueue.h:28
A simple, thread safe queue.
Definition: YiConcurrentQueue.h:22
bool TryPop(YI_DATA &rValue)
Definition: YiConcurrentQueue.h:91
bool WaitAndPop(YI_DATA &rValue)
Definition: YiConcurrentQueue.h:121
bool Wait(CYIMutex &rMutex)
A class used to block a thread until a condition is met, as signaled by a different thread...
Definition: YiWaitCondition.h:64
Definition: YiAutoMutex.h:23
CYIConcurrentQueue & operator=(const CYIConcurrentQueue< YI_DATA > &rhs)
Definition: YiConcurrentQueue.h:46
CYIConcurrentQueue(const CYIConcurrentQueue< YI_DATA > &other)
Definition: YiConcurrentQueue.h:36