Windows'ta Sleep () işlevini oyun döngüsünde (C ++) kullanmak güvenli midir? Sabit kare hızına sahip olmak istiyorum.
Windows'ta Sleep () işlevini oyun döngüsünde (C ++) kullanmak güvenli midir? Sabit kare hızına sahip olmak istiyorum.
Yanıtlar:
Hayır değil. Uyku, sadece uyumak için minimum bir süreyi garanti eder , ancak gerçekte bunun üzerinde herhangi bir süre için uyuyabilir. Zamanlayıcı çözünürlüğünüz (timeBeginPeriod ile ayarlanır) bunun için de önemlidir ve zamanlayıcınız için başka bir şey (QueryPerformanceCounter gibi) kullanıyor olsanız bile, Uyku durumunu kontrol etmek için yine de timeBeginPeriod'a ihtiyacınız vardır.
Yani özet olarak:
Sleep kullanmak için makul olan tek şey, örneğin mobil cihazlar için CPU kullanımını azaltmak isteseniz olur. O zaman bile Sleep (1) kullanıyor olacaksınız; kare hızlarını kontrol etmek için kullanmak yol değildir.
Vsync'i zorlamak muhtemelen sabit bir kare hızı elde etmenin yaygın bir yoludur, ancak o zaman bile, farklı donanımlar farklı yenileme hızlarında çalışır ve farklı makineler arasında tutarlı bir sabit kare hızına sahip olamazsınız (bu ne tür bir donanıma bağlıdır) Elbette hedefliyorsunuz).
Şu anda bu makaleden bahsetmek gerekiyor: Gaffer On Games - Timestep'inizi düzeltin! . Bu, simülasyonunuzda tutarlı bir zaman aşımı elde etmek için gereken adımları açıklar.
Kısa cevap: hayır, öyle değil.
Sabit bir kare hızına sahip olmak için, belirli bir kare hızını zorlayan belirli bir geri arama işlevini çağırmanız gerekir. Açıkçası, şimdi bir döngüdeki tek bir yinelemenin ne kadar zaman alacağını bilmiyorsanız, sabit bir uyku süresi ayarlayamazsınız.
GLUT, OpenGL'de programlama yapıyorsanız, ihtiyacınız olan doğru işlevi sağlayan glutTimerFunc () işlevini sağlar. Bu örneğe veya buna bir göz atın .
Sleep
nedir?