Nigdy nie powinieneś nigdy, nigdy, nigdy, nigdy nie używać Snu do kontrolowania prędkości klatek .
To już zostało omówione wcześniej i odniosę się do drugiego pytania w celu omówienia powodów. Jedną z rzeczy, o których nie wspomniano, jest to, że przy typowej współczesnej częstotliwości odświeżania wynoszącej 60 Hz i przy typowej ziarnistości wywołań uśpienia wynoszącej 1 milisekundę, w rzeczywistości nie można spać przez właściwy czas między ramkami.
Ja nie mówiąc, że otrzymując procesora jeśli nic mam jest złe; daleko stąd. Ale to nie to samo, co kontrolowanie liczby klatek na sekundę, a Sleep jest rozwiązaniem odpowiednim dla pierwszego, ale nie drugiego.
Zamiast tego sprawdź czas, który upłynął, a jeśli nadszedł czas, aby uruchomić ramkę, zrób to, w przeciwnym razie - a jeśli chcesz uzyskać trochę procesora - Uśpij przez absolutny minimalny czas - 1 milisekundę. Upewnij się również, że twój wyłącznik czasowy jest odpowiednio skonfigurowany dla twojej platformy, aby zapewnić ci dobrą rozdzielczość; tzn. kiedy wydasz to wywołanie „Sleep (1)”, naprawdę masz szansę na naprawdę Sleeping na 1 milisekundę, a nie na coś takiego jak 15, 20 lub 30 (co byłoby w innym przypadku). Wierzę, że SDL zrobi to automatycznie.
Możesz również wbudować w nią trochę luzu, aby w momencie, gdy zbliża się czas uruchomienia ramki, przestajesz spać i zaczynasz biegać płasko, aż ramka się uruchomi, co może pomóc w dokładniejszym trafieniu żądanego interwału klatek.
Tak to wygląda na całą masę wywołań Sleep (1) przeplatanych od czasu do czasu ramką, i to jest OK. Nadal rezygnujesz z procesora, gdy go nie potrzebujesz, ale Twoje ramki będą mogły działać na czas.