Sie müssen klären, was Sie unter "sicher" verstehen. Natürlich ist es sicher und wird den Speicher nicht beschädigen oder den PC des Spielers in die Luft jagen.
Kromster sagt Unterstützung Monica
Antworten:
32
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:
Die Zeit zum Schlafen ist nur ein garantiertes Minimum und die tatsächliche Schlafzeit kann höher sein.
Sensitiv für den über timeBeginPeriod eingestellten (oder nicht eingestellten) Wert.
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.
Enormer Dank für den Link. Bisher habe ich normalerweise den im Artikel beschriebenen "variablen Zeitschritt" -Ansatz verwendet.
Ivan Vučica
Der Ruhezustand ist auch auf Computern mit aktivierter Intel-Geschwindigkeitsstufe gefährlich.
waterwizard11
"aber es kann tatsächlich für eine beliebige Zeitspanne darüber schlafen." Nun, das muss bewiesen werden, denke ich ... Ich habe noch nie einen Beweis dafür gesehen, also denke ich, dass es eine dieser 'Definitionen' ist. Gute Antwort, und ja, Sie können keine Art von Schlaf verwenden, um eine feste Framerate einzustellen (auch wenn dies genau war).
Valmond
2
Per MSDN - "Beachten Sie, dass die sofortige Ausführung eines bereiten Threads nicht garantiert ist. Infolgedessen wird der Thread möglicherweise erst einige Zeit nach Ablauf des Ruheintervalls ausgeführt". Ich habe es zwar noch nie gesehen, aber wenn es als möglich dokumentiert ist, würde ich mich definitiv nicht darauf verlassen, dass es niemals passiert.
Maximus Minimus
1
Erwähnenswert, ich denke, dies würde sich beziehen auf "... wenn Sie die CPU-Auslastung reduzieren wollten ...": nanobit.net/doxy/quake3/win__main_8c-source.html <- relevanter Code beginnt bei 01224
user_123abc
16
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 .
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.
quelle
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 .
quelle
Sleep
?