template <class T>
class EventQueue : public AutoResetEvent
{
public:
EventQueue() : AutoResetEvent(), m_queue(), m_cs()
{
}
virtual ~EventQueue()
{
}
void Clear()
{
ScopedLock synch(m_cs);
while(!m_queue.empty())
{
m_queue.pop();
}
}
int Size()
{
ScopedLock lock(m_cs);
return m_queue.size();
}
bool Empty()
{
ScopedLock synch(m_cs);
return m_queue.empty();
}
void Push(T node)
{
ScopedLock synch(m_cs);
m_queue.push(node);
// 큐가 빈 상태에서 데이터가 들어오면 알린다.
if(1 == m_queue.size())
Set();
}
bool Pop(T& output)
{
ScopedLock synch(m_cs);
if(m_queue.empty())
return false;
output = m_queue.front();
m_queue.pop();
return true;
}
// outs must valid and classic-array or 0-base operator[] overloading
int Pop(T* outs, int max)
{
if(0 >= max || 0 == outs)
return 0;
ScopedLock synch(m_cs);
int count = 0;
for(count = 0 ; count < max ; count++)
{
if(m_queue.empty())
return count;
outs[count] = m_queue.front();
m_queue.pop();
}
return count;
}
private:
std::queue<T> m_queue;
CriticalSection m_cs;
};
////////////////////////////////////////////////////////////////////////
사용하는 소스 정리중...
'NetLib > Source' 카테고리의 다른 글
| EventQueue (0) | 01:44:14 |
|---|
Refactoring
Gof의 디자인 패턴
테스트 주도 개발 TDD
인텔 스레딩 빌딩 블록
소프트웨어 아키텍쳐 평가
소프트웨어 아키텍쳐 이론과 실제
패턴 그리고 객체지향 코딩의 법칙
UML 실전에서는 이것만 쓴다.
C++ 프로그래밍 언어
책을 더 많이 보긴한거 같은데... 책장을 보니 2011년에 읽은거는 이것밖에 안보이네.
'도서 > 2011년' 카테고리의 다른 글
| 2011년 한해동안 읽었던 책 (2) | 2012/01/14 |
|---|