在一些密集计算的函数中,需要耗费大量的时间,并且是阻塞方式运行,这时候界面就会卡死
执行过程并不会动态的刷新界面显示,而是执行完成后显示最后一次的刷新效果
解决办法:
可以使用线程来异步运行该函数,如果不想使用线程,可以
定义一个函数DoEvents()
bool DoEvents()
{
MSG msg;
while (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
{
return false;
}
if (!AfxGetApp()->PreTranslateMessage(&msg))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
}
return true;
}
在密集计算的代码中调用该方法
while(true){
//其它代码
...
//刷新界面的语句
((CEdit*)GetDlgItem(IDC_EDIT1))->SetWindowText(tempStr);
//调用DoEvents
DoEvents();
}
这样就可以在每次while循环中进行一次界面刷新,实时显示运行的状态