CWaitCursor wait;MSG msg;
DWORD dwStartTime = 0, dwEndTime = 0;
dwStartTime = dwEndTime = GetTickCount();
while( (dwEndTime - dwStartTime) < 3000 )//等待5秒,判断是否超时
{
while( ::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) )
{
::TranslateMessage( &msg );
::DispatchMessage( &msg );
}
dwEndTime = GetTickCount();
}
这样不会出现3秒的沙漏型,这是什么原因呢?

解决方案 »

  1.   

    去掉
    while( ::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) )
    {
    ::TranslateMessage( &msg );
    ::DispatchMessage( &msg );
    }
    换上Sleep(100);
      

  2.   

    CWaitCursor wait;MSG msg;
    DWORD dwStartTime = 0, dwEndTime = 0;
    dwStartTime = dwEndTime = GetTickCount();
    while( (dwEndTime - dwStartTime) < 3000 )//等待5秒,判断是否超时
    {
    while( ::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) )
    {
    ::TranslateMessage( &msg );
    ::DispatchMessage( &msg );
    }
    wait.Restore();
    dwEndTime = GetTickCount();
    }