Queue.cpp
上传用户:tt_chan
上传日期:2009-12-03
资源大小:4523k
文件大小:2k
源码类别:

模拟服务器

开发平台:

Visual C++

  1. // **************************************************************************************
  2. //
  3. //  Euyheon's Queue Class
  4. //
  5. //  All written by Euy-heon, Jeong.
  6. //  Copyright(C) 1999-2001 Euy-heon, Jeong. All rights reserved.
  7. //
  8. // Win32 Version : Compiled by Microsoft Visual C++ 6.0
  9. //
  10. // Problems & History
  11. // ------------------
  12. //
  13. // **************************************************************************************
  14. #include "stdafx.h"
  15. CWHQueue::CWHQueue()
  16. {
  17. // InitializeCriticalSection(&m_cs);
  18. m_btQPushPos = 0;
  19. m_btQPopPos = 0; 
  20. m_btCount = 0;
  21. }
  22. CWHQueue::~CWHQueue()
  23. {
  24. // DeleteCriticalSection(&m_cs);
  25. }
  26. BOOL CWHQueue::PushQ(BYTE *lpbtQ)
  27. {
  28. BOOL fRet = TRUE;
  29. // EnterCriticalSection(&m_cs);
  30. __try
  31. {
  32. if (m_btQPushPos + 1 == m_btQPopPos || (m_btQPushPos + 1 == (unsigned) QUEUE_MAX && !m_btQPopPos))
  33. {
  34. fRet = FALSE;
  35. __leave; // Queue is full.
  36. }
  37. m_lpCircularQ[m_btQPushPos] = lpbtQ;
  38. m_btQPushPos++;
  39. m_btCount++;
  40. if (m_btQPushPos == (unsigned) QUEUE_MAX)
  41. m_btQPushPos = 0;
  42. }
  43. __finally
  44. {
  45. // LeaveCriticalSection(&m_cs);
  46. }
  47. return fRet;
  48. }
  49. BYTE *CWHQueue::PopQ()
  50. {
  51. BYTE *pbt = NULL;
  52. // EnterCriticalSection(&m_cs);
  53. __try
  54. {
  55. if (m_btQPopPos == (unsigned) QUEUE_MAX)
  56. m_btQPopPos = 0;
  57. if (m_btQPopPos == m_btQPushPos)
  58. __leave; // No event.
  59. m_btQPopPos++;
  60. m_btCount--;
  61. pbt = m_lpCircularQ[m_btQPopPos - 1];
  62. }
  63. __finally
  64. {
  65. // LeaveCriticalSection(&m_cs);
  66. }
  67. return pbt;
  68. }