Piszę aplikację C++/SDL/OpenGL i miałem najbardziej osobliwy błąd. Wydaje się, że gra działa dobrze z prostym, zmiennym czasem. Ale potem FPS zaczął zachowywać się dziwnie. Doszedłem do wniosku, że zarówno Sleep (1), jak i SDL_Delay (1) ukończą 15 ms.Sleep (1) i SDL_Delay (1) trwa 15 ms
Wszelkie dane wejściowe do tych funkcji między 0-15 trwa 15 ms, aby zakończyć, zamykając FPS około 64. Jeżeli ustawić go do 16, trwa 30 MS o.o.
nie mam pojęcia, dlaczego tak się dzieje. To najdziwniejszy błąd, jaki kiedykolwiek spotkałem.
Moja pętla wygląda następująco:
while (1){
GLuint t = SDL_GetTicks();
Sleep(1); //or SDL_Delay(1)
cout << SDL_GetTicks() - t << endl; //outputs 15
}
To będzie bardzo rzadko podejmują 1ms jak to ma, ale większość czasu to trwa 15 ms.
Mój system operacyjny to Windows 8.1. CPU to intel i7. Używam SDL2. Wszelkie pomysły zostaną docenione, ponieważ jestem nieświadomy.
możliwy duplikat funkcji [SleepAPI programu WinAPI Sleep sleeps] dłużej niż oczekiwano] (http://stackoverflow.com/questions/9518106/winapi-sleep-function- call-sleeps - przez dłuższy czas niż oczekiwano) –
Nie chcesz, aby wątek/proces był uśpiony, jeśli spodziewasz się, że się obudzi w czasie rzeczywistym. Użyj blokady, jeśli nie chcesz przejmować się planowaniem. –