📄 buffer.h
字号:
/******************************************************************************
CopyRight (c) 2000-2006 南京南自信息技术有限公司
All rights reserved.
文件名称:Buffer.h
文件标识:缓冲区类--线程安全的
文件摘要:缓冲区类声明文件
作 者:王强
建立日期:2006.09.06
完成日期:2006.09.06
当前版本:1.0
修订版本:未修订
作 者:
完成日期:
******************************************************************************/
#ifndef BufferH
#define BufferH
#include <vector>
using namespace std;
class TWQFrame
{
#define FRAME_SIZE 0x00001000-3
public:
TWQFrame(void)
:m_usLen(0),m_bReadFlag(false)
{
memset(m_szBuffer,0,FRAME_SIZE);
}
TWQFrame(const TWQFrame &rhs)
:m_usLen(rhs.m_usLen),m_bReadFlag(rhs.m_bReadFlag)
{
memcpy(m_szBuffer,rhs.m_szBuffer,rhs.m_usLen);
}
TWQFrame &operator=(const TWQFrame &rhs)
{
if(this!=&rhs)
{
m_usLen = rhs.m_usLen;
m_bReadFlag = rhs.m_bReadFlag;
memcpy(m_szBuffer,rhs.m_szBuffer,rhs.m_usLen);
}
return *this;
}
void SetData(char *szBuffer,unsigned short usLen)
{
m_usLen=usLen%FRAME_SIZE; //防止溢出
memcpy(m_szBuffer,szBuffer,m_usLen);
m_szBuffer[m_usLen] = '\0';
// m_bReadFlag = false;
}
char m_szBuffer[FRAME_SIZE];
unsigned short m_usLen;
bool m_bReadFlag;
};
class TBuffer
{
public:
//构造函数
TBuffer(int iSize=0x400);
//析构函数
virtual ~TBuffer(void);
//返回缓冲区大小
int GetBufferSize(void)const {return m_iSize;}
//将数据添加到缓冲区中
void PushData(char *szBuffer,unsigned short usLen);
//将一个数据库帧添加到缓冲区中
void PushFrame(TWQFrame &frame);
//从缓冲区返回一个数据帧
TWQFrame *GetFrame(void);
//复位缓冲区,将读位置置0、将写位置置1
void Reset(void);
//返回缓冲区中是否有数据
bool HaveData(void);
//返回缓冲区是否为空
bool IsEmpty(void);
#ifdef _DEBUG
int GetWritePos(void)const {return m_usWritePos;}
int GetReadPos(void)const {return m_usReadPos;}
#endif
protected:
int m_iSize; //缓冲区大小
vector<TWQFrame*> m_vct; //数据帧容器
unsigned short m_usReadPos; //当前读位置,即指向下一次返回的数据
unsigned short m_usWritePos; //当前写位置,即下一次数据帧写入的地方
CRITICAL_SECTION m_cs; //并发控制
};
#endif //BufferH
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -