频道栏目
首页 > 程序开发 > 综合编程 > 其他综合 > 正文
C 环形缓存区
2017-04-12 13:57:00         来源:KK的博客  
收藏   我要投稿

C 环形缓存区: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= COMM_BUFF_MAX)
			{
				comm_bufferNextReadPos = 0;
			}
		}

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

 

 

 

使用方式:

	commDataIn(buf, n);  //存入数据
	int len = commGetData(buf, n);  //取出数据


点击复制链接 与好友分享!回本站首页
上一篇:机器学习系列-特征工程
下一篇:linux route命令的使用详解
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站