MFC 界面卡死到底为何

2025-10-08 09:31:54

现象:程序运行一段时间后,界面卡死

程序开启了一个监听线程:

//创建接收信号线程

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;

}

为何运行一段时间后,界面会出现卡死现象?

海贼王:卡普为何被称为海军英雄,从这三拳可以看出他强于四皇
【原】十个新闻标题回顾本届世界杯