Browsed by
Schlagwort: Interpolation

Interpolierter, flexibler Vorgang mit fester Dauer bei Verwendung von Sleep in einer Schleife

Interpolierter, flexibler Vorgang mit fester Dauer bei Verwendung von Sleep in einer Schleife

Ein besserer Titel ist mir leider nicht eingefallen.

Prinzipiell geht es um eine normale Schleife, bei der man einen Vorgang über einen bestimmten Zeitraum interpoliert durchführen möchte.

Normalerweise hat man die gewünschte Gesamtdauer, sowie den gesamten auszuführenden Vorgang, teilt dann die Gesamtdauer in bestimmte kleine Schritte ein, berechnet dementsprechend passende Schritte für den auszuführenden Vorgang, und erstellt dann eine for-Schleife:

1
2
3
4
5
for (int i = 0; i < steps; ++i)
{
    Fortschritt += step;
    Sleep(dauer);
}

So eine Schleife hat ein großes Problem: System.Threading.Thread.Sleep ist extrem ungenau. Typischerweise hat es eine Auflösung von nicht weniger als 15ms. Hat man also seine Schritte z. B. für eine Auflösung von 5ms berechnet, wird die Ausführung der Schleife 3x so lange dauern wie erwartet.

Auch läßt sich bei einem Sleep schlecht vorhersagen, auch innerhalb der 15ms (Un-)Genauigkeit, wie lange es dauern wird, da diese Zeit sehr abhängig von der aktuellen Systemauslastung ist.

Mehr lesen Mehr lesen