1 / 31
文档名称:

C 缓存设计.doc

格式:doc   大小:88KB   页数:31页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

C 缓存设计.doc

上传人:1542605778 2022/3/25 文件大小:88 KB

下载得到文件列表

C 缓存设计.doc

相关文档

文档介绍

文档介绍:以windows IOCP为例,complete线程在接收到数据后,应该马上将接收到的数据拷贝到解包缓存,然后立即发起一次新的WSARecv操作。然后再对解包缓存执行操作,解析出逻辑包。通常的方法是将数据拷贝到一个环形缓冲中,以减少数据的拷binBuffer)
{
m_binBuffer = new char[m_len];
m_binBufferPos = 0;
}
str = &m_binBuffer[m_binBufferPos];
unsigned int copySize = sizeRemain;
memcpy(&m_readBuf->m_buf[m_readPos],&m_binBuffer[m_binBufferPos],copySize);
m_readBuf = m_readBuf->m_next;
m_readPos = 0;
m_binBufferPos += copySize;
copySize = strLen - copySize;
memcpy(&m_readBuf->m_buf[m_readPos],&m_binBuffer[m_binBufferPos],copySize);
m_readPos += copySize;
}
m_dataRemain -= strLen;
Arrange();
return str;
}

const void* ReadBinary(unsigned short &len)
{
len = (unsigned int)Read<short>();
if(len == 0 || m_dataRemain < len)
{
return 0;
}
if(m_dataRemain < len)
return 0;//应提示错误,可能读包顺序与发包不一致了

void *bin;

unsigned int sizeRemain = m_readBuf->m_bufSize - m_readPos;
//当前buf还有多少有效数据
if(sizeRemain >= len)
{
bin = &m_readBuf->m_buf[m_readPos];
m_readPos += len;
}
else
{
if(!m_binBuffer)
{
m_binBuffer = new char[m_len];
m_binBufferPos = 0;
}
bin = &m_binBuffer[m_binBufferPos];
unsigned int copySize = sizeRemain;
memcpy(&m_readBuf->m_buf[m_readPos],&m_binBuffer[m_binBufferPos],copySize);
m_readBuf = m_readBuf->m_next;
m_readPos = 0;
m_binBufferPos += copySize;
copySize = len - copySize;
memcpy(&m_readBuf->m_buf[m_readPos],&m_binBuffer[m_binBufferPos],copySize);
m_readPos += copySize;
}