C 环形缓存区


直接上代码

#pragma once
#ifndef QLIST_H_
#define QLIST_H_
void commInit();
void commDataIn(int * pData, int len);
int commGetDataLen();
int commGetData(int *pRevcBuff, int len);
#endif


#include "stdafx.h"
#include "Qlist.h"

/***************************************************************
*  COMM_BUFF_MAX  设置缓存区大小 
*  void commDataIn(int * pData, int len); 存入数据(存入指针数组,长度)
*  int commGetDataLen();  获取当前环形缓存区长度
*  int commGetData(int *pRevcBuff, int len); 获取数据(获取后返回的指针数组,要获取长度). 返回值:成功:返回长度; 失败:-1 (超过缓存内的数据)
*
***************************************************************/
#define COMM_BUFF_MAX 128			

int comm_bufferRecv[COMM_BUFF_MAX];
int comm_bufferNextWritePos=0;
int comm_bufferNextReadPos=0;
int comm_bufferDataCount=0;

//传入数据
void commDataIn(int * pData, int len)
{
	for (int i = 0; i < len; i++)
	{
		if (comm_bufferDataCount < COMM_BUFF_MAX)
		{
			comm_bufferRecv[comm_bufferNextWritePos++] = pData[i];
			comm_bufferDataCount++;
			if (comm_bufferNextWritePos >= COMM_BUFF_MAX)
			{
				comm_bufferNextWritePos = 0;
			}
		}
	}
}

int commGetDataLen()
{
	return comm_bufferDataCount;
}

int commGetData(int *pRevcBuff, int len)
{
	int i;
	if (len <= comm_bufferDataCount)
	{
		for (i = 0; i<len; i++)
		{
			pRevcBuff[i] = comm_bufferRecv[comm_bufferNextReadPos++];
			
			comm_bufferDataCount--;
			
			if (comm_bufferNextReadPos >= COMM_BUFF_MAX)
			{
				comm_bufferNextReadPos = 0;
			}
		}

		return len;
	}
	else
	{
		return -1; //超出长度
	}
}



使用方式:
	commDataIn(buf, n);  //存入数据
	int len = commGetData(buf, n);  //取出数据



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值