检查你的代码,看线程启动燃让时,哪个部分的 *** 作导致了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也不是很夸张啊,但为啥就界面卡死了呢?
而且刚刚运行的时候不是很卡,时间久了就卡了,是啥东西比如句柄用完了没释放导致的吗?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)