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

lfxiansheng 2017-10-27 05:55:07
这个是主线程中的部分代码;
在调试和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;
}
...全文
639 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lfxiansheng 2017-10-30
  • 打赏
  • 举报
回复
//if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE )) //即使是界面被阻塞了,死了,这个消息依然是能进来的 while (PeekMessage(&msg,NULL,0,0,PM_REMOVE))[/size] //不知道原因,但是的确有效的解决问题,把消息队列的所有消息都取出来。。。 { TranslateMessage(&msg); DispatchMessage(&msg); }
lfxiansheng 2017-10-30
  • 打赏
  • 举报
回复
没有人回答一下嘛!!自己顶一下。。。。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧