Sto scrivendo un'applicazione C++/SDL/OpenGL e ho avuto il bug più strano. Il gioco sembrava funzionare bene con un semplice timestep variabile. Ma poi l'FPS ha iniziato a comportarsi in modo strano. Ho capito che sia Sleep (1) che SDL_Delay (1) richiedono 15 ms per essere completati.Sleep (1) e SDL_Delay (1) richiede 15 ms
Qualsiasi ingresso in tali funzioni tra 0-15 prende 15ms per completare, bloccando FPS a circa 64. Se impostato a 16, ci vuole 30 MS o.o
ho idea perché questo sta avvenendo. Questo è il bug più strano che abbia mai incontrato.
Il mio ciclo si presenta così:
while (1){
GLuint t = SDL_GetTicks();
Sleep(1); //or SDL_Delay(1)
cout << SDL_GetTicks() - t << endl; //outputs 15
}
Sarà molto raramente prendere 1ms come si suppone, ma la maggior parte del tempo che ci vuole 15ms.
Il mio sistema operativo è Windows 8.1. La CPU è un Intel i7. Sto usando SDL2. Qualsiasi idea sarebbe apprezzata, dal momento che io sono senza tracce.
possibile duplicato della chiamata di funzione [WinAPI Sleep() per un periodo di inattività superiore a quello previsto] (http://stackoverflow.com/questions/9518106/winapi-sleep-function- call-sleeps-for-longer-than-expected) –
Non si desidera mettere un thread/processo in stop se ci si aspetta che si attivi in tempo reale. Usa uno spinlock se non vuoi preoccuparti della programmazione. –