📄 buffer.cpp
字号:
/******************************************************************************
CopyRight (c) 2000-2006 南京南自信息技术有限公司
All rights reserved.
文件名称:buffer.cpp
文件标识:缓冲区类
文件摘要:缓冲区实现文件
作 者:王强
建立日期:2006.09.06
完成日期:2006.09.11
当前版本:1.0
修订版本:未修订
作 者:
完成日期:
******************************************************************************/
#include "buffer.h"
/******************************************************************************
函 数 名:TBuffer
参 数:
参数类型 参数性质 参数名 描述
返回类型:
返 回 值:
目 的:构造函数
说 明:
记 录:日期时间 作 者 备注
2006.09.06 王 强 编制程序
******************************************************************************/
TBuffer::TBuffer(int iSize)
:m_iSize(iSize),m_usReadPos(0),m_usWritePos(1)
{
for(int i=0;i<m_iSize;++i)
{
m_vct.push_back(new TWQFrame);
}
::InitializeCriticalSection(&m_cs);
}
/******************************************************************************
函 数 名:~TBuffer
参 数:
参数类型 参数性质 参数名 描述
返回类型:
返 回 值:
目 的:析构函数
说 明:
记 录:日期时间 作 者 备注
2006.09.06 王 强 编制程序
******************************************************************************/
TBuffer::~TBuffer(void)
{
::DeleteCriticalSection(&m_cs);
for(int i=0;i<m_vct.size();++i)
{
delete m_vct[i];
}
m_vct.clear();
}
/******************************************************************************
函 数 名:PushFrame
参 数:
参数类型 参数性质 参数名 描述
返回类型:void
返 回 值:
目 的:向缓冲区中加入数据
说 明:
记 录:日期时间 作 者 备注
2006.09.06 王 强 编制程序
******************************************************************************/
void TBuffer::PushFrame(TWQFrame &frame)
{
::EnterCriticalSection(&m_cs);
*(m_vct[m_usWritePos]) = frame;
m_vct[m_usWritePos]->m_bReadFlag = false; //置未读标记
unsigned short usTmp((++m_usWritePos)%m_iSize);
m_usWritePos = usTmp;
::LeaveCriticalSection(&m_cs);
}
/******************************************************************************
函 数 名:GetFrame
参 数:
参数类型 参数性质 参数名 描述
bool IN bRelease 此数据读取过后,是否将
数据指针移动到下一个可
读数据处
返回类型:TWQFrame *
返 回 值:缓冲区中的数据,如果返回空指针,表示缓冲区为空
目 的:从缓冲区中取得数据
说 明:
记 录:日期时间 作 者 备注
2006.09.06 王 强 编制程序
******************************************************************************/
TWQFrame *TBuffer::GetFrame(void)
{
TWQFrame *pFrame(NULL);
::EnterCriticalSection(&m_cs);
unsigned short usTmp((m_usReadPos+1)%m_iSize);
//缓冲区为空时不读取
if(usTmp!=m_usWritePos)
{
m_usReadPos = usTmp;
pFrame = m_vct[m_usReadPos];
pFrame->m_bReadFlag = true;
//数据取走后,判断缓冲区是否为空
}
::LeaveCriticalSection(&m_cs);
return pFrame;
}
/******************************************************************************
函 数 名:Reset
参 数:
参数类型 参数性质 参数名 描述
返回类型:void
返 回 值:
目 的:将缓冲区复位到初始状态
说 明:
记 录:日期时间 作 者 备注
2006/09/07 王 强 编制程序
******************************************************************************/
void TBuffer::Reset(void)
{
::EnterCriticalSection(&m_cs);
m_usReadPos=0;
m_usWritePos=1;
int iSize(m_vct.size());
for(int i=0;i<iSize;++i)
{
m_vct[i]->m_bReadFlag = false;
}
::LeaveCriticalSection(&m_cs);
}
/******************************************************************************
函 数 名:HaveData
参 数:
参数类型 参数性质 参数名 描述
返回类型:bool
返 回 值:
true :缓冲区不空,有数据
false:缓冲区空,无数据
目 的:判断缓冲区内是否有未读的数据
说 明:判断当前写位置与读位置是否不同,如果不同,表示缓冲区不空;
记 录:日期时间 作 者 备注
2006/09/07 王 强 编制程序
******************************************************************************/
bool TBuffer::HaveData(void)
{
bool bResult(false);
::EnterCriticalSection(&m_cs);
unsigned short usTmp((m_usReadPos+1)%m_iSize);
bResult = (usTmp!=m_usWritePos);
::LeaveCriticalSection(&m_cs);
return bResult;
}
/******************************************************************************
函 数 名:IsEmpty
参 数:
参数类型 参数性质 参数名 描述
返回类型:bool
返 回 值:
true :缓冲区空,无数据
false:缓冲区不空,有数据
目 的:判断缓冲区是否为空
说 明:判断当前写位置与读位置是否不同,如果不同,表示缓冲区不空;
记 录:日期时间 作 者 备注
2006/09/07 王 强 编制程序
******************************************************************************/
bool TBuffer::IsEmpty(void)
{
return !HaveData();
}
/******************************************************************************
函 数 名:PushData
参 数:
参数类型 参数性质 参数名 描述
char * IN szBuffer
unsigned short IN usLen
返回类型:void
返 回 值:
目 的:向缓冲区中加入数据
说 明:
记 录:日期时间 作 者 备注
2006.09.06 王 强 编制程序
******************************************************************************/
void TBuffer::PushData(char *szBuffer,unsigned short usLen)
{
::EnterCriticalSection(&m_cs);
TWQFrame *pFrame(m_vct[m_usWritePos]);
pFrame->SetData(szBuffer,usLen);
pFrame->m_bReadFlag = false; //置未读标记
unsigned short usTmp((++m_usWritePos)%m_iSize);
m_usWritePos = usTmp;
::LeaveCriticalSection(&m_cs);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -