C++环形缓冲区的简单实现

分享一个在工作中用到的简单的环形缓冲区。构造简单,可以改造到Qt中使用,也可以直接在VS下使用。

所谓环形缓冲区,其实就是带有标识缓冲区中数据头、尾位置的缓冲区,这个缓冲区根据业务的不同,要设置的稍微大一点,不能一有数据过来就填满了,这样就失去使用的意义了。

在实际工作中,我们使用TCP和设备进行通信,如果数据流量过大,可以先把数据接收到数据缓冲区中,处理之后再取出。我们定义的包协议可以采用定长包,可以采用不定长度的包,环形缓冲区都能处理。

//头文件定义
class CircleBuffer
{
public:
    CircleBuffer();
    ~CircleBuffer();

private:
    char *buf;                 //指向环形缓冲区的指针
    int head;                  //缓冲区头部索引
    int rear;                  //缓冲区尾部索引
    int maxBuf;                //缓冲区的最大值(根据业务不同,设置合适的值)
    int packHeadLength;        //数据包头长度(如果是定长包,那么这里可以是整个数据包。如果是不
                               //定长的,那么这里就是包头的长度)
    char processBuf[1024];     //缓冲区中的数据就放在这里进行处理,然后通过回调或者信号槽的方 
                               //式传递出去
protected:
    inline int  getDataLength();               //缓冲区中数据的长度
    inline int  getFreeBufferLength();     
  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值