MFC 界面卡死到底为何
现象:程序运行一段时间后,界面卡死
程序开启了一个监听线程:
//创建接收信号线程
Thread = AfxBeginThread(GetIOMsgThread,
this,
THREAD_PRIORITY_NORMAL,
0,
0,
NULL);
int CFEECARD_MULTIDlg::MainGetIOMsg(LPVOID lpParam)
{
int ret = -1;
UCHAR ucBuff[1024];
DWORD dwReadLength;
int nE = 0;
int nD = 0;
int nB = 0;
int n7 = 0;
while(!stopFlag2)
{
if (m_bIsConnectedIOComm == TRUE)
{
unsigned char IOBuff[256]={0};
int nRecv= 0;
Sleep(50);
memset(IOBuff,0,256);
nRecv = ReadComm(IOBuff, 256,hComm_IO);
if (nRecv)
{
for(int i = 0;i { if ((IOBuff[i]==0x0E) && (DownloadParam[0].GoFlag == FALSE))//第一个socket { nE++; if (nE > 10) { nE = 0; DownloadParam[0].GoFlag = TRUE; ResumeThread(DownloadParam[0].hThread); } } else if ((IOBuff[i] == 0x0D) && (DownloadParam[1].GoFlag == FALSE))//第二个socket { nD++; if (nD > 10) { nD = 0; DownloadParam[1].GoFlag = TRUE; ResumeThread(DownloadParam[1].hThread); } } else if ((IOBuff[i] == 0x0B) && (DownloadParam[2].GoFlag == FALSE))//第三个socket { nB++; if (nB > 10) { nB = 0; DownloadParam[2].GoFlag = TRUE; ResumeThread(DownloadParam[2].hThread); } } else if ((IOBuff[i] == 0x07) && (DownloadParam[3].GoFlag == FALSE))//第四个socket { n7++; if (n7 > 10) { n7 = 0; DownloadParam[3].GoFlag = TRUE; ResumeThread(DownloadParam[3].hThread); } } } } } } return 0; } 另外又创建了四个下载线程: DownloadParam[i].hThread = (AfxBeginThread(DownCosThread, &(DownloadParam[i]),THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL))->m_hThread; 创建不运行,当监听线程接收到信号时,唤醒下载线程: int CFEECARD_MULTIDlg::DownLoadCosProc(LPVOID lpParam) { P_DL_COS_STR pDownloadParam = (P_DL_COS_STR)lpParam; CString str; //图片显示初始化 sd_init(pDownloadParam->pPics); pDownloadParam->pPrgs->SetPos(0); pDownloadParam->pPrgs->SetWindowText(""); pDownloadParam->pPrgs->SetShowText(false); str.Format("%d-- 未连接设备",pDownloadParam->threadID); pDownloadParam->pNotes->SetWindowText(str); pDownloadParam->pResults->SetWindowText("等待开始信号..."); while(!stopFlag) { Sleep(2000); //if(pDownloadParam->GoFlag) { //图片显示初始化 sd_init(pDownloadParam->pPics); pDownloadParam->pPrgs->SetPos(0); pDownloadParam->pPrgs->SetWindowText(""); pDownloadParam->pPrgs->SetShowText(false); pDownloadParam->pResults->SetWindowText(""); str.Format("%d --",pDownloadParam->threadID); pDownloadParam->pNotes->SetWindowText(str+" 未连接设备"); if (DownLoadCosBin(lpParam)) { ShowDownLoadNum(1); sd_error(pDownloadParam->pPics); GoFail(pDownloadParam->threadID); pDownloadParam->pPCSCReaderName=""; str.Format("%d-- 未连接设备",pDownloadParam->threadID); pDownloadParam->pNotes->SetWindowText(str); } else { pDownloadParam->pPCSCReaderName=""; str.Format("%d-- 未连接设备",pDownloadParam->threadID); pDownloadParam->pNotes->SetWindowText(str); if (SetCos(lpParam)) { ShowDownLoadNum(1); sd_error(pDownloadParam->pPics); GoFail(pDownloadParam->threadID); } else { Show_Process_Map("下载COS完成",100,lpParam); pDownloadParam->pResults->SetWindowText("下载COS完成"); ShowDownLoadNum(0); sd_success(pDownloadParam->pPics); GoPass(pDownloadParam->threadID); } if (pDownloadParam->hComm != NULL) { m_cardReaderUartT1.SMCardClosePort(pDownloadParam->hComm); pDownloadParam->hComm = NULL; } } pDownloadParam->GoFlag = FALSE; SuspendThread(pDownloadParam->hThread); } } return 0; } 为何运行一段时间后,界面会出现卡死现象?
【原】十个新闻标题回顾本届世界杯