创建线程后,用循环里MsgWaitForMultipleObjects后,一切运行正常,但是开启一个不相干的第三方程序就死了,弄了很久找不到原因,求大神解答

lfxiansheng lfxiansheng 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
这个是主线程中的部分代码;
在调试和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;
}
...全文

相关推荐

评论 2
收藏 已收藏
分享
返回顶部
lfxiansheng
进程/线程/DLL 15,466 成员 49,169 内容