Windows MessageBox, приводящий к некорректной работе релиза OpenGL - PullRequest
0 голосов
/ 07 марта 2012

В программе OpenGL win32, разработанной в Visual Studio C ++ 2010, отладочная версия работает правильно, несмотря ни на что, версия выпуска работает, только если я вставляю диагностическое сообщение MessageBox () в определенный диапазон моего кода. Конечно, это проблема, потому что теперь я не могу отлаживать свою версию релиза с помощью MessageBox (), что я обычно делаю. Более того, если я помещу MessageBox () в другую часть кода (внутри ошибочного цикла Display), вместо того, чтобы заставить программу работать правильно, он превратит курсор в «песочные часы» / «non-hourglass» и не будет отображать MessageBox () почти как если бы код MessageBox () вызывался каждый кадр дисплея, но ничего не делал правильно.

Понимание того, что может быть причиной ошибки, если MessageBox () волшебным образом исправляет ее в некоторых местах.

1 Ответ

1 голос
/ 07 марта 2012

MessageBox() имеет встроенный цикл обработки сообщений Windows для обслуживания сообщений окна.

Где-то в вашем приложении на очень низком уровне в вашем дизайне, вам нужен цикл сообщений Windows для обслуживания сообщений для окна, содержащего ваш контент openGL. Это должно выполняться из потока, который создал окно. Вредные эффекты, которые вы видите в других местах, могут быть легко вызваны побочными эффектами конкуренции, когда MessageBox() вызывается из другого потока.

Вот введение в работу оконных сообщений в MSDN.

Использование сообщений и очередей сообщений @ MSDN

Проще говоря (через пример кода из wikipedia ), вам нужен постоянный цикл, похожий на следующее:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    MSG msg;
    while(GetMessage(&msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

В зависимости от того, как вы справились с обновлением окна, если вы используете сообщения рисования (WM_PAINT), вам нужно убедиться, что они отправляются как можно быстрее, или вам может потребоваться полностью их подавить, если вы рисуете прямо к устройству постоянного тока. Я упоминаю об этом, потому что вы можете найти дополнительные ошибки после правильной настройки цикла сообщений.

Сообщение WM_PAINT @ MSDN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...