创建线程后,用循环里MsgWaitForMultipleObjects后,一切运行正常,但是开启一个不相干的第三方程序就死了,弄了很久找不到原因,求大神解答
这个是主线程中的部分代码;
在调试和release版本中单独运行都很正常;
但是我一打开另外一个读取数据的程序就死了;另外的数据读取程序和本程序无关,而且不管这个程序有没有读取到数据,这个程序对应的硬件有没有挂上,都会阻塞我的程序,我的程序数据更新显示都还在,就是鼠标等操作都没有应答了,也关闭不了;这个程序是我买一个设备自带的,不知道为什么会发生这种情况,大神给看一下吧;
hPrsEvents=CreateEvent(NULL,FALSE,FALSE,NULL);
hPrsDEvents=CreateEvent(NULL,FALSE,FALSE,NULL);
hDAQThread=AfxBeginThread(CDaqUsb1616HS::DaqScanT,&m_daq); // 数据采集线程
hPrcThread=AfxBeginThread(CDataPreAnalyse::DaqRundataPrc,&m_dpa); //数据处理线程
hAllEvents[0]=hPrsEvents;
hAllEvents[1]=hPrsDEvents;
while (TRUE)
{
dwRet = MsgWaitForMultipleObjects (2, hAllEvents, FALSE, INFINITE, QS_ALLINPUT); //等待
switch(dwRet)
{
case WAIT_OBJECT_0: //停止
str.Format("数据采集结束!采集次数=%ld,显示存储数量=%ld;",m_daq.daqP.SampleNum,i);
strInfo=str;
break; //break the loop
case WAIT_OBJECT_0+1: // 数据更新
i++;
str.Format("显示数据个数i=%ld,数据处理次数=%d;",i,m_dpa.dataP.iPrsTimes);
strInfo=str;
SetStatusInfo(strInfo,1);
UpdateShow();
continue;
case WAIT_OBJECT_0 + 2:
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE )) //即使是界面被阻塞了,死了,这个消息依然是能进来的
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
continue;
default:
break; // unexpected failure
}
break;
}