template < class T > class CMemBuffer
{
protected:
int m_iBufferSize; //缓冲区长度
T *m_pData; //缓冲区指针
CRITICAL_SECTION m_CSLock; //多线程锁
//构析
public:
CMemBuffer()
{
//初始化
memset(this, 0, sizeof(*this));
InitializeCriticalSection(&m_CSLock);
}
~CMemBuffer()
{
//释放
ReleaseBuffer();
DeleteCriticalSection(&m_CSLock);
}
//释放缓冲区
protected:
void ReleaseBuffer()
{
if(m_pData)
{
delete []m_pData;
m_pData = NULL;
}
m_iBufferSize = 0;
}
//多线程锁
public:
void Lock() { EnterCriticalSection(&m_CSLock); }
void Unlock() { LeaveCriticalSection(&m_CSLock); }
//获取缓冲区
public:
T * GetBuffer(int iTgtLen)
{
T *pRet = NULL;
do
{
if(m_pData && m_iBufferSize >= iTgtLen)
{
pRet = m_pData;
break;
}
ReleaseBuffer();
__try
{
m_pData = new T [iTgtLen];
m_iBufferSize = iTgtLen;
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
}
}while(0);
return pRet;
}
int GetBufferSize()
{
return (m_pData && m_iBufferSize)? m_iBufferSize:0;
}
};