티스토리 툴바


2012/01/30 01:44

EventQueue

NetLib/Source 2012/01/30 01:44

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
2012/01/14 00:27
POSA1
Refactoring
Gof의 디자인 패턴
테스트 주도 개발 TDD
인텔 스레딩 빌딩 블록
소프트웨어 아키텍쳐 평가
소프트웨어 아키텍쳐 이론과 실제
패턴 그리고 객체지향 코딩의 법칙
UML 실전에서는 이것만 쓴다.
C++ 프로그래밍 언어

책을 더 많이 보긴한거 같은데... 책장을 보니 2011년에 읽은거는 이것밖에 안보이네.

저작자 표시 비영리 동일 조건 변경 허락

'도서 > 2011년' 카테고리의 다른 글

2011년 한해동안 읽었던 책  (2) 2012/01/14