Czy korzystanie z funkcji Sleep () w systemie Windows w pętli gier (C ++) jest bezpieczne? Chcę mieć stałą liczbę klatek na sekundę.
Czy korzystanie z funkcji Sleep () w systemie Windows w pętli gier (C ++) jest bezpieczne? Chcę mieć stałą liczbę klatek na sekundę.
Odpowiedzi:
Nie, nie jest. Sen gwarantuje jedynie minimalny czas do spania, ale w rzeczywistości może spać przez dowolną ilość czasu. Twoja rozdzielczość timera (ustawiona przez timeBeginPeriod) jest również ważna dla niego, a nawet jeśli używasz czegoś innego (np. QueryPerformanceCounter) dla swojego timera, nadal potrzebujesz timeBeginPeriod do kontrolowania snu.
Podsumowując:
Jedynym uzasadnionym przypadkiem użycia trybu uśpienia byłoby zmniejszenie zużycia procesora przez np. Urządzenia mobilne. Nawet wtedy będziesz używać Sleep (1); używanie go do kontrolowania liczby klatek na sekundę nie jest dobrym rozwiązaniem.
Wymuszanie włączenia vsync jest prawdopodobnie jednym z powszechnych sposobów uzyskania stałej liczby klatek na sekundę, ale nawet wtedy inny sprzęt będzie działał z różnymi częstotliwościami odświeżania i nie będziesz w stanie uzyskać stałej stałej liczby klatek na różnych komputerach (zależy to od rodzaju sprzętu oczywiście celujesz).
W tym momencie należy wspomnieć o tym artykule: Gaffer On Games - Fix Your Timestep! . Opisuje kroki potrzebne do uzyskania spójnego pomiaru czasu w symulacji.
Krótka odpowiedź: nie, nie jest.
Aby mieć stałą liczbę klatek na sekundę, musisz wywołać określoną funkcję zwrotną, która wymusza określoną liczbę klatek na sekundę. Oczywiście, jeśli nie wiesz, ile czasu zajmie pojedyncza iteracja w pętli, nie możesz ustawić ustalonego czasu uśpienia.
GLUT zapewnia glutTimerFunc () , co oznacza, że jeśli programujesz w OpenGL, potrzebujesz odpowiedniej funkcji. Spójrz na ten przykład lub ten .
Sleep
?