Musisz wyjaśnić, co rozumiesz przez „bezpieczny”. Oczywiście jest to bezpieczne i nie uszkodzi pamięci ani nie zniszczy komputera graczy.
Kromster mówi o wsparciu Moniki
Odpowiedzi:
32
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:
Czas na sen to tylko gwarantowane minimum, a faktyczny czas snu może być dłuższy.
Wrażliwe na wartość ustawioną (lub nie ustawioną) przez timeBeginPeriod.
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.
Ogromne dzięki za link. Do tej pory zwykle korzystałem z podejścia „zmiennego timestep” opisanego w artykule.
Ivan Vučica
Uśpienie jest również niebezpieczne na komputerach z włączoną funkcją Intel Speed-Step.
waterwizard11,
„ale w rzeczywistości może spać przez dowolną ilość czasu”. Cóż, chyba trzeba to udowodnić ... Nigdy nie widziałem na to żadnego dowodu, więc chyba jest to jedna z tych „definicji”. Dobra odpowiedź i tak, nie możesz (nawet jeśli jest, dokładnie tak, jak to jest), użyć dowolnego rodzaju uśpienia, aby ustawić stałą szybkość klatek (cóż, możesz, ale potrzebujesz precyzyjnego timera, aby to zrobić).
Valmond
2
Według MSDN - „Pamiętaj, że nie można zagwarantować, że gotowy wątek uruchomi się natychmiast. W związku z tym wątek może działać dopiero po upływie określonego czasu”. To prawda, że nigdy tego nie widziałem, ale jednocześnie, jeśli jest to udokumentowane jako możliwe, zdecydowanie nie polegałbym na tym, że to się nigdy nie wydarzy.
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 .
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.
źródło
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 .
źródło
Sleep
?