48 lines
657 B
C
48 lines
657 B
C
|
#ifndef _LOCKINGQUEUE_H_
|
||
|
#define _LOCKINGQUEUE_H_
|
||
|
|
||
|
#include "Thread.h"
|
||
|
#include <queue>
|
||
|
|
||
|
// i should make one of those single reader/ single writer queues
|
||
|
|
||
|
template <typename T>
|
||
|
class LockingQueue
|
||
|
{
|
||
|
public:
|
||
|
size_t Size()
|
||
|
{
|
||
|
m_crit.Enter();
|
||
|
const size_t s = m_queue.size();
|
||
|
m_crit.Leave();
|
||
|
return s;
|
||
|
}
|
||
|
|
||
|
void Push(const T& t)
|
||
|
{
|
||
|
m_crit.Enter();
|
||
|
m_queue.push(t);
|
||
|
m_crit.Leave();
|
||
|
}
|
||
|
|
||
|
bool Pop(T& t)
|
||
|
{
|
||
|
m_crit.Enter();
|
||
|
if (m_queue.size())
|
||
|
{
|
||
|
t = m_queue.front();
|
||
|
m_queue.pop();
|
||
|
m_crit.Leave();
|
||
|
return true;
|
||
|
}
|
||
|
m_crit.Leave();
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
std::queue<T> m_queue;
|
||
|
Common::CriticalSection m_crit;
|
||
|
};
|
||
|
|
||
|
#endif
|