Ist es sicher, die Sleep () - Funktion unter Windows in Game Loop (C ++) zu verwenden? Ich möchte eine feste Bildrate haben.
Ist es sicher, die Sleep () - Funktion unter Windows in Game Loop (C ++) zu verwenden? Ich möchte eine feste Bildrate haben.
Antworten:
Nein, ist es nicht. Schlaf garantiert nur eine minimale Zeit zum Schlafen, aber es kann tatsächlich für eine beliebige Zeitspanne darüber schlafen. Ihre Timer-Auflösung (über timeBeginPeriod festgelegt) ist ebenfalls wichtig. Auch wenn Sie für Ihren Timer etwas anderes (wie QueryPerformanceCounter) verwenden, benötigen Sie timeBeginPeriod, um den Ruhezustand zu steuern.
Also zusammenfassend:
Der einzig vernünftige Fall für die Verwendung des Energiesparmodus wäre, wenn Sie die CPU-Auslastung für z. B. mobile Geräte reduzieren möchten. Selbst dann würden Sie Sleep (1) verwenden; es zu verwenden, um Frameraten zu steuern, ist nicht der richtige Weg.
Das Erzwingen von vsync ist wahrscheinlich eine gängige Methode, um eine feste Bildrate zu erhalten, aber selbst dann wird unterschiedliche Hardware mit unterschiedlichen Aktualisierungsraten ausgeführt, und Sie können auf unterschiedlichen Computern keine konsistente feste Bildrate erzielen (dies hängt von der Art der Hardware ab) Sie zielen natürlich).
Zu diesem Zeitpunkt ist es notwendig, diesen Artikel zu erwähnen: Gaffer On Games - Fix Your Timestep! . Das beschreibt die Schritte, die Sie benötigen, um einen konsistenten Zeitschritt in Ihrer Simulation zu erhalten.
Kurze Antwort: Nein, das ist es nicht.
Um eine feste Bildrate zu haben, müssen Sie eine bestimmte Rückruffunktion aufrufen, die eine bestimmte Bildrate erzwingt. Wenn Sie jetzt nicht wissen, wie lange eine einzelne Iteration in einer Schleife dauert, können Sie offensichtlich keine feste Ruhezeit festlegen.
GLUT bietet glutTimerFunc () . Wenn Sie in OpenGL programmieren, ist dies die richtige Funktion, die Sie benötigen. Schauen Sie sich dieses oder dieses Beispiel an .
Sleep
?