读书人

memcpy()将多个buffer顺序存至一块内存

发布时间: 2013-10-11 14:52:39 作者: rapoo

memcpy()将多个buffer顺序存至一块内存遇到的问题
目前想法中的代码如下,线程中顺序采入大小为lDatalen的pBuffer。
将20次的数据按顺序存入m_pPackBuffer后,PostMessage一次,再从头循环。
现在的问题是Post过去的实际效果只有第一包的位置有数据,怀疑是存储指针的处理上出了问题,C++新手求指点……

if (nPacketCount < 20)
{
memcpy(m_pPackBuffer, pBuffer, lDataLen);
*m_pPackBuffer = *m_pPackBuffer + lDataLen;
nPacketCount ++ ;//分包计数
}

if (nPacketCount = 20)
{
if (m_hParentHwnd)
{
::PostMessage(m_hParentHwnd, WM_SHOW_IMG, (WPARAM)m_lDataLen, (LPARAM)m_pPackBuffer);
}
memset(m_pPackBuffer, 0, 10240);
*m_pPackBuffer = *m_pPackBuffer - m_lDataLen;
memcpy(m_pPackBuffer, pBuffer, lDataLen);
nPacketCount = 1;
}

[解决办法]
*m_pPackBuffer = *m_pPackBuffer + lDataLen;

你这是啥啊?应该是
m_pPackBuffer = m_pPackBuffer + lDataLen;
不过注意保存原始指针

另外
PostMessage不是阻塞函数,你后面紧接着就清空指针,很危险,应该用sendmessage


[解决办法]
LONG lBufferSize = pDevice->m_nInBufferSize;
UCHAR* pBuffer = new UCHAR[lBufferSize];
memset(pBuffer, 0, lBufferSize*sizeof(UCHAR));//初始化数组
LONG lDataLen = lBufferSize;
UCHAR* m_pPackBuffer[10240];
static long start = 0;
static long offset = 0;


if (nPacketCount < 20)
{
m_pPackBuffer[start + offset] = pBuffer;
++offset;
nPacketCount ++ ;//分包计数
}
//if (nPacketCount = 20)
else if (nPacketCount = 20)
{
if (m_hParentHwnd)
{
::PostMessage(m_hParentHwnd, WM_SHOW_IMG, (WPARAM)offset, (LPARAM)m_pPackBuffer[start]);
}
start = offset;
offset = 0;
m_pPackBuffer[start + offset] = pBuffer;
++offset;
nPacketCount = 1;
}

读书人网 >C语言

热点推荐