Мой главный цикл обработки сообщений в приложении Win32 OpenGL выглядит следующим образом:Win32 Main Message Loop для OpenGL
// Inside wWinMain
bool bQuit = false;
while(bQuit == false)
{
DWORD dwReturn = ::MsgWaitForMultipleObjects(0, NULL, FALSE, 12, QS_ALLINPUT);
if(dwReturn == WAIT_OBJECT_0)
{
MSG msg;
BOOL bReturn = ::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE);
if(bReturn != FALSE)
{
if(msg.message == WM_QUIT)
bQuit = true;
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
}
if(dwReturn == WAIT_OBJECT_0 || dwReturn == WAIT_TIMEOUT)
{
RenderFrame();
::SwapBuffers(hDc);
}
}
Она работает почти нормально, у меня есть только одна проблема: при нажатии клавиши Alt + F4, чтобы закрыть окно , он не уходит сразу после того, как я отпираю ключ, однако, если я наводил курсор мыши на окно, он немедленно завершает работу.
A) Почему это? Как мне изменить мой цикл?
B) Исходный код, который я нашел, не использовал MsgWaitForMultipleObjects, но назывался RenderFrame непрерывно. Я думаю, что слишком много времени процессора тратится на перерисовку экрана. Я прав? Как обычно, тратите ли вы лишнюю емкость на рисование?
Пожалуйста, покажите реальный код. Цикл 'while (bQuit)' никогда не запускается. – IInspectable
Не похоже, что у нас достаточно кода. И этот код не реален. Цикл никогда не будет выполняться. –
@IInspectable - как насчет 'if (msg.message == WM_QUIT) bQuit = true;'? это и разрыв петли – RbMm