int WINAPI thread(LPVOID lArgs)
{
DWORD *dwBuf = NULL;
float *pThed = NULL;
float *pChannel = NULL;
BYTE* tmp = new AMP_DATA_BLOCK;
float k = 0.2;
float c = 100;
dwBuf = new DWORD[1024];
pThed = new float[2028];
pChannel = pThed + 1024;
memset(dwBuf, 0, (sizeof(DWORD) * 1024));
memset(pThed, 0, (sizeof(float) * 1024));
memset(pChannel, 0, (sizeof(float) * 1024));
while (TRUE)
{
EngineWaitData(INFINITE);
if (Read(nReadIndex, tmp, 1024,&nActualRead))
{
for (...)
{
nBufI = tmp->ampBuf[nI] * k + c;
dwBuf[nBufI]++;
}
}
// 采集数据30秒后处理
if ((GetTickCount() - Time) >= (30 * 1000))
{
exeCount++;
TEST1((int*)dwBuf, 1024 ,pThed, 2);
TEST2(pThed, 1024, 0, pChannel, 0, 0);
// 第一次校正
if (1 == exeCount)
{
k = ((k * 800) / pChannel[0]);
memset(dwBuf, 0, (sizeof(DWORD) * 1024));
memset(pThed, 0, (sizeof(float) * 1024));
memset(pChannel, 0, (sizeof(float) * 1024));
}
// 第二次退出
else if (exeCount > 1)
break;
Time = GetTickCount();
}
}
RETAILMSG(TRUE, (_T("\r\nReadThread Exit\r\n")));
return 0;
}
bool TEST1(int * pA, int nB, float * pC, int D)
{
float *pTmp = NULL;
pTmp = ( float * ) malloc ( sizeof(float) * nChannel );
if( pTmp == NULL )
{
return false;
}
// 数据计算处理
free( pTmp );
return true;
}
bool TEST2(float * pA, int B, float C, float *pC, float D, float E)
{
float fwhm = 10;
float *pDiff = NULL;
float *pDiff2 = NULL;
pDiff = ( float * ) malloc ( sizeof(float) * nChannel );
pDiff2 = ( float * ) malloc ( sizeof(float) * nChannel );
if( pDiff == NULL )
{
return false;
}
if(pDiff2 == NULL)
{
return false;
}
// 数据计算处理
free(pDiff);
free(pDiff2);
return TRUE;
}复制代码
在线程里面开辟的pThed,和TEST2函数中第一次malloc的pDiff,地址相同
加入TEST2函数中第一次malloc的是pDiff2,那么就是pDiff2和pThed地址一样
我也这样测试过,在TEST2函数调用之前,NEW了一个float的地址空间,地址和pThed是相同的