BuffManager.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #include "stdafx.h"
  2. #include "BuffManager.h"
  3. BuffNode::BuffNode()
  4. {
  5. m_Buff.resize(PAGE, 0);
  6. }
  7. BuffNode::~BuffNode()
  8. {
  9. }
  10. //--------------
  11. BuffManager::BuffManager()
  12. {
  13. BuffNode *p = NULL;
  14. m_Lock = CreateMutex(0, 0, 0);
  15. WaitForSingleObject(m_Lock, INFINITE);
  16. //for the first time ,init as four
  17. p = new BuffNode();
  18. m_BuffManager.push_back(p);
  19. p = new BuffNode();
  20. m_BuffManager.push_back(p);
  21. p = new BuffNode();
  22. m_BuffManager.push_back(p);
  23. p = new BuffNode();
  24. m_BuffManager.push_back(p);
  25. ReleaseMutex(m_Lock);
  26. }
  27. BuffManager::~BuffManager()
  28. {
  29. WaitForSingleObject(m_Lock, INFINITE);
  30. for (size_t i = 0; i < m_BuffManager.size(); i++)
  31. {
  32. delete m_BuffManager[i];
  33. }
  34. m_BuffManager.clear();
  35. ReleaseMutex(m_Lock);
  36. CloseHandle(m_Lock);
  37. }
  38. BuffNode *BuffManager::GetBuff()
  39. {
  40. BuffNode *p = NULL;
  41. WaitForSingleObject(m_Lock, INFINITE);
  42. if (m_BuffManager.size() > 0)
  43. {
  44. p = m_BuffManager[m_BuffManager.size() - 1];
  45. m_BuffManager.pop_back();
  46. p->m_Buff[0] = 0;
  47. }
  48. else
  49. {
  50. //we need new one
  51. p = new BuffNode();
  52. p->m_Buff[0] = 0;
  53. }
  54. ReleaseMutex(m_Lock);
  55. return p;
  56. }
  57. void BuffManager::ReleaseBuff(BuffNode* p)
  58. {
  59. WaitForSingleObject(m_Lock, INFINITE);
  60. m_BuffManager.push_back(p);
  61. ReleaseMutex(m_Lock);
  62. }
  63. BuffManager g_BuffManager;