当应用进行复杂计算或占用很多系统资源操作时用户点击界面按钮时无法响应有两种解决思路方法:计算线程消息循环重载技术即在应用中处理Windows消息循环这样既可以在主线程中进行复杂计算以满足实时计算要求又能即使响应用户输入随时中止计算!
举例如下:
while(!m_bStop && iStep <= 500) {
iStep;
m_pgProgress.StepIt;
Sleep(20);
DoEvents; // 2次消息循环
}
void DoEvents
{
MSG msg;
(::PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { //从Windows消息队列中取出消息
(msg.message WM_QUIT)//如果消息为退出发送退出消息
{
::PostQuitMessage(-1);
}
(!AfxGetApp->PreTranslateMessage(&msg))//如果无法预处理消息
{
::TranslateMessage(&msg);//转换消息
::DispatchMessage(&msg);//发送消息
}
}
AfxGetApp->OnIdle(0);AfxGetApp->OnIdle(1);//消息队列为空时闲置段时间
}
最新评论