void CATCommandDlg::OnButtonStart()
{
//YH012000000006
UpdateData();
char strMcu[100];
DWORD dwThreadID;
memset(strMcu,0,100);
ShowCalResult(Testing);
UpdataClear(1);
if (!CheckSNIMEIBT())
{
UpdataClear(0);
return;
}
// selMcu=m_Config.m_iCom/*this->m_ComMCU.GetCurSel()*/;
// if(selMcu < 0)
// {
// Display(">>>>>>>>Please Choose ModemCOM And MCUCOM!",0);
// UpdataClear(0);
// return;
// }
if(m_Config.m_iCheckStation == LATESTRECORDITEM)
{
hCommWatchThread = CreateThread( (LPSECURITY_ATTRIBUTES) NULL,
0,
(LPTHREAD_START_ROUTINE)LatestRecordProc,
this,
0,
&dwThreadID );
}
else
{
hCommWatchThread = CreateThread( (LPSECURITY_ATTRIBUTES) NULL,
0,
(LPTHREAD_START_ROUTINE)CommWatchProc,
this,
0,
&dwThreadID );
}
#if 1
/*
* 主线程中不要使用WaitForSingleObject和WaitForMultiObjects两个函数等待线程退出,原因就是有导致程序死锁的隐患
* 特别是线程函数里调用了SendMessage或者直接操作了MFC对象,更容易出现此种现象。为了解决这个问题,微软特别提供了
* 一个函数,MsgWaitForMultipleObjects
* 这个函数可以实现等待线程hCommWatchThread退出,然后设置焦点(调用SetWindowFocus()),但是在显示激活码的时候会有卡顿
*
* 当然这里也可以在这里另外开启一个线程来等待这个线程结束,结束的话,就在新开启的线程中发消息去处理主线程的Control
* 我没有去用这种方式处理,应该这样也可以
*/
DWORD dRet = -2;
MSG msg;
while(1){
dRet = MsgWaitForMultipleObjects(1,&hCommWatchThread,
FALSE,INFINITE,QS_ALLINPUT|QS_ALLPOSTMESSAGE);
if(dRet == WAIT_OBJECT_0){
CloseHandle(hCommWatchThread);
SetWindowFocus();
break;
}else{
/*
* 本来只有PeekMessage这一句,后来感觉显示激活码的时候有卡顿,并且在置灰激活码编辑框的时候没有起作用
* 就加了TranslateMessage和DispatchMessage这两句
*/
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
#endif
}
主线程中等待子线程结束
猜你喜欢
转载自blog.csdn.net/yangkunhenry/article/details/103265514
今日推荐
周排行