Windows Game Loop 50% ЦП на двухъядерном - PullRequest
4 голосов
/ 02 марта 2010

Только в игровом цикле используется 50% загрузки ЦП, я еще не выполнял рендеринга. Что я здесь делаю?

        while(true)
        {
            if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
            {
                    if(msg.message == WM_QUIT || 
                           msg.message == WM_CLOSE || 
                           msg.message == WM_DESTROY)
                            break;

                    TranslateMessage(&msg);
                    DispatchMessage(&msg);                   
            }
            else
            {
                    //Run game code, break out of loop when the game is over

            }
        }

Ответы [ 12 ]

0 голосов
/ 02 марта 2010

это не выглядит как основной цикл стандартного приложения win32 ... это похоже на

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;
 }

поскольку вы находитесь внутри цикла while (true), возможно, даже пользовательские события (мышь и клавиатура) не могут быть правильно отправлены в очередь сообщений

Если ваша цель - разработать приложение для игры в win32, я предлагаю вам взглянуть на Directx

0 голосов
/ 02 марта 2010

В вашем блоке else попробуйте добавить это:

sleep(0);

Это приведет к тому, что ваш поток уступит ЦП, нарушая цикл занятости-ожидания. Чтобы создать действительный код игры, используйте таймер, как предлагает tvanfosson, чтобы пробудить другую игровую нить.

...