现象:程序运行一段时间后,界面卡死
程序开启了一个监听线程:
//创建接收信号线程
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<nRecv;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;
}
为何运行一段时间后,界面会出现卡死现象?