为什么PeekMessage总是返回TRUE?

时间:2012-03-18 14:12:45

标签: winapi peekmessage

        // Main message loop

        MSG msg;
        ZeroMemory( &msg, sizeof( msg ) );
        while(msg.message!=WM_QUIT)
        {

            if(PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
            {
                TranslateMessage( &msg );
                DispatchMessage( &msg );
            }
            else
            {
                Render();
            }
        }

“渲染”功能尚未执行

1 个答案:

答案 0 :(得分:2)

PeekMessage文档说明了返回值:

  

如果有消息,则返回值为非零值。

     

如果没有可用的消息,则返回值为零。

当消息队列为空时,它确实将返回零,即FALSE。因此,结论是消息队列永远不会为空。最可能的解释是,您在DispatchMessage中处理的其中一条消息会导致将相同的消息发布到队列中。