⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buffer.h

📁 一个缓冲区管理类
💻 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 + -