Почему PeekMessage всегда возвращает TRUE? - PullRequest
1 голос
/ 18 марта 2012
        // 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 Ответ

2 голосов
/ 18 марта 2012

Документация PeekMessage говорит это относительно возвращаемого значения:

Если сообщение доступно, возвращаемое значение отлично от нуля.

Если сообщений нет, возвращаемое значение равно нулю.

Когда очередь сообщений пуста, она действительно вернет ноль, т. Е. FALSE. Следовательно, вывод состоит в том, что очередь сообщений никогда не бывает пустой. И наиболее вероятным объяснением этого является то, что одно из сообщений, которое вы обрабатываете в DispatchMessage, приводит к тому, что это же сообщение отправляется в очередь.

...