当我们在处理大程序时,常常需要耗很长时间,为了不让用户错误的认为系统已经死机,我们要给程序添加进度条,但是大家知道如果就直接添加进度条,并在程序里面控制它的进度,往往得到的结果是程序仍然像死机状态,直到处理完毕才显示进度条进度为100%,中间的过程看不到了,那么怎么办呢,是为什么呢?
原因是我们处理大程序和进度条显示是在同一个线程中进行的,这样往往因为处理大程序导致界面无法实时更新。
解决办法就是把处理大程序的这段逻辑让一个单独的线程在处理,并利用postmessage或sendmessage给主界面发送消息,让主界面去更新。
参见:
http://hi.baidu.com/dnboy/blog/item/5433a9f8b690c40cd8f9fd3c.html
其实,为了不让程序逻辑上看起来混乱,另外有一个简单的办法。
在调用进度条刷新之后,调用如下语句:
MSG message;
while (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage(&message);
::DispatchMessage(&message);
}//来响应windows消息如移动,进度条刷新
就可以了。
