#include "stdafx.h" #include "BuffManager.h" BuffNode::BuffNode() { m_Buff.resize(PAGE, 0); } BuffNode::~BuffNode() { } //-------------- BuffManager::BuffManager() { BuffNode *p = NULL; m_Lock = CreateMutex(0, 0, 0); WaitForSingleObject(m_Lock, INFINITE); //for the first time ,init as four p = new BuffNode(); m_BuffManager.push_back(p); p = new BuffNode(); m_BuffManager.push_back(p); p = new BuffNode(); m_BuffManager.push_back(p); p = new BuffNode(); m_BuffManager.push_back(p); ReleaseMutex(m_Lock); } BuffManager::~BuffManager() { WaitForSingleObject(m_Lock, INFINITE); for (size_t i = 0; i < m_BuffManager.size(); i++) { delete m_BuffManager[i]; } m_BuffManager.clear(); ReleaseMutex(m_Lock); CloseHandle(m_Lock); } BuffNode *BuffManager::GetBuff() { BuffNode *p = NULL; WaitForSingleObject(m_Lock, INFINITE); if (m_BuffManager.size() > 0) { p = m_BuffManager[m_BuffManager.size() - 1]; m_BuffManager.pop_back(); p->m_Buff[0] = 0; } else { //we need new one p = new BuffNode(); p->m_Buff[0] = 0; } ReleaseMutex(m_Lock); return p; } void BuffManager::ReleaseBuff(BuffNode* p) { WaitForSingleObject(m_Lock, INFINITE); m_BuffManager.push_back(p); ReleaseMutex(m_Lock); } BuffManager g_BuffManager;