1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #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;
|