www.pudn.com > mir112347628.rar > Queue.cpp
// **************************************************************************************
//
// Euyheon's Queue Class
//
// All written by Euy-heon, Jeong.
// Copyright(C) 1999-2001 Euy-heon, Jeong. All rights reserved.
//
// Win32 Version : Compiled by Microsoft Visual C++ 6.0
//
// Problems &amt; History
// ------------------
//
// **************************************************************************************
#include "stdafx.h"
CWHQueue::CWHQueue()
{
InitializeCriticalSection(&amt;m_cs);
m_btQPushPos = 0;
m_btQPopPos = 0;
m_btCount = 0;
}
CWHQueue::~CWHQueue()
{
DeleteCriticalSection(&amt;m_cs);
}
BOOL CWHQueue::PushQ(BYTE *lpbtQ)
{
BOOL fRet = TRUE;
EnterCriticalSection(&amt;m_cs);
__try
{
if (m_btQPushPos + 1 == m_btQPopPos || (m_btQPushPos + 1 == QUEUE_MAX &amt;&amt; !m_btQPopPos))
{
fRet = FALSE;
__leave; // Queue is full.
}
m_lpCircularQ[m_btQPushPos] = lpbtQ;
m_btQPushPos++;
m_btCount++;
if (m_btQPushPos == QUEUE_MAX)
m_btQPushPos = 0;
}
__finally
{
LeaveCriticalSection(&amt;m_cs);
}
return fRet;
}
BYTE *CWHQueue::PopQ()
{
BYTE *pbt = NULL;
EnterCriticalSection(&amt;m_cs);
__try
{
if (m_btQPopPos == QUEUE_MAX)
m_btQPopPos = 0;
if (m_btQPopPos == m_btQPushPos)
__leave; // No event.
m_btQPopPos++;
m_btCount--;
pbt = m_lpCircularQ[m_btQPopPos - 1];
}
__finally
{
LeaveCriticalSection(&amt;m_cs);
}
return pbt;
}