mfc两个独立线程会卡顿

mfc两个独立线程会卡顿,第1张

这是的线程耗用了大部分的皮毁局CPU时间,这跟线程多少没太大关系,有些进程有几十个线程在同时跑,都不会卡。

检查你的代码,看线程启动燃让时,哪个部分的 *** 作导致了CPU占用很高,能不能优化下。

具体处理方法,UINT CMainUIThreadWaitDlg::StartThread(LPVOID pParam)

{

((CMainUIThreadWaitDlg*)pParam)->ThreadWork()

return 0

}

void CMainUIThreadWaitDlg::ThreadWork()

{

OutputDebugString(_T("+++++Start+++++\r\n"))

Sleep(20*1000)

OutputDebugString(_T("++++++End+++++\r\n"))

}

void CMainUIThreadWaitDlg::DoEvent()

{

MSG msg

if(::PeekMessage(&msg,NULL,0,0,PM_REMOVE)) //取消息,检索应用程序的消息队列,PM_REMOVE取过之后从余码消息队列中移除

{

//发消息

::TranslateMessage(&msg)

::DispatchMessage(&msg)

}

}

CWinThread* pThread = NULL

void CMainUIThreadWaitDlg::OnBnClickedBtnWork()

{

m_btnWork.EnableWindow(FALSE) //按钮禁灰

pThread = AfxBeginThread(StartThread,this) //起线程

DWORD dwRet

DoEvent()

do

{

dwRet = ::MsgWaitForMultipleObjects(1, &pThread->m_hThread, FALSE, INFINITE, QS_ALLINPUT)

if (dwRet != WAIT_OBJECT_0)

{

DoEvent()

}

} while ((dwRet != WAIT_OBJECT_0) &&(dwRet != WAIT_FAILED))

m_btnWork.EnableWindow(TRUE) //按钮点亮

}

写的都是阻塞的,不过应该影响不大。

由于监控下位机有个心跳数据需要取,所以每一秒发一条命令然后受到状态更新界面上一个CStatic。

现在,MFC程序刚刚启动时还好,资源管理器显示平均CPU占有1.2左右局搭脊;

不过,啥也不干,就那么放着,一个小时左右后整个电脑都开始卡,这时显示平均CPU占用5左右。到后来桐渗,干脆整个程序枝蠢界面都卡死了,就是Ctrl+Tab回不来了。但是至少后台在打印txt日志的行程还在运行。

从资源管理器来看,平均%5的CPU也不是很夸张啊,但为啥就界面卡死了呢?

而且刚刚运行的时候不是很卡,时间久了就卡了,是啥东西比如句柄用完了没释放导致的吗?


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12421365.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存