发表于:2008-03-26 16:53:00
5楼
贴一小段代码
class CFrmBuf //循环队列缓冲区,取出后不再存在
{
public:
CFrmBuf()
{
nmaxsize = 256;
nmaxsizeperfrm = 160;
nhead =0;
ntail = 0;
};
~CFrmBuf()
{
};
FRMITEM frms[256];
int nmaxsize;//最大空间 256帧;
int nmaxsizeperfrm;//最大每帧字节数160
int nhead;//头
int ntail;//尾
// nhead == ntail 空
// (nhead + 1) % nmaxsize == ntail 满
void Clear()
{
nhead = ntail;
};
BOOL AddFrm(char *s,int nlen)//添加
{
if((nlen >= nmaxsizeperfrm)||(nlen < 1))
return FALSE;
if(((nhead + 1) % nmaxsize) == ntail) //满
return FALSE;
nhead = (nhead + 1) % nmaxsize;
memcpy(frms[nhead].cbuf,s,nlen);
frms[nhead].nlen = nlen;
return TRUE;
};
int GetFrm(char *buf,int nbuflen)//取回
{
if(nhead == ntail)
return 0;
ntail = (ntail + 1)%nmaxsize;
if(frms[ntail].nlen > nbuflen)
return 0;
memcpy(buf,frms[ntail].cbuf,frms[ntail].nlen);
int nret = frms[ntail].nlen;
return nret;
};
};