Sleep / Wait ohne CPU zu verbrauchen

So simuliere ich diese Smartphone-App für Windows. Es ist ein Spiel, das seine Logik ausführt und Methoden an einem @ zeichne1/60 Bewertung. In Millisekunden ist dies16.6667

Ich habe diese Spieleschleife implementiert:

    private const double UPDATE_RATE = 1000d / 60d;

    private void GameLoop()
    {
        double startTime;
        while (GetStatus() != GameStatus.NotConnected)
        {
            startTime = Program.TimeInMillis;
            //Update Logic
            while (Program.TimeInMillis - startTime <= UPDATE_RATE)
            {
                //Thread.Yield(); it consumed CPU before adding this too, adding this had no effect
                Thread.Sleep(TimeSpan.FromTicks(1));//don't eat my cpu
            }
        }
        Debug.WriteLine("GameLoop shutdown");
    }

Program.TimeInMillis kommt von einemNanoStopwatch Klasse, die die Zeit in Millis in @ zurückgidouble. Das ist nützlich, weil dieser Gameloop wirklich genau sein muss, damit alles funktioniert.

Wie Sie wahrscheinlich wissen, dieThread.Sleep wird hier viel CPU verbrauchen. Wahrscheinlich, weil es @ erfordeint millis welches mein @ konvertieTimeSpan bis 0 Millisekunden.

Ich bin vor kurzem auf dieses Ding namens @ gestoßWaitHandle, aber alles was ich sehe benutztint millis. Ich muss das wirklich genau machen, also brauche ich eigentlichdouble millis odermicroseconds/nanoseconds.

Ist irgendetwas in C #, das es mir erlaubt,Wait für x Mikrosekunden. Es macht mir nichts aus, selbst etwas zu erschaffen (wie ich es für das @ getan haNanoStopwatch), aber ich muss in die richtige Richtung weisen. Fand viel im Internet, aber alles verwendetint millis und das ist mir nicht genau genug.,

Ich habe einige Tests durchgeführt, um das @ zu änderSleep um etwas zu benutzen wie:UPDATE_RATE - (Program.TimeInMillis - startTime) Das macht meinen Gameloop nicht genau.

Ich hoffe, alles ist klar genug, wenn Sie weitere Informationen benötigen, hinterlassen Sie einfach einen Kommentar.

tl; dr - Gibt es eine Möglichkeit, einen Thread auf eine Menge von @ warten zu lassemicroseconds/nanoseconds imC#? Mein Gameloop muss genau sein und Millisekunden sind für mich nicht genau genug.

Danke im Voraus

Antworten auf die Frage(2)

Ihre Antwort auf die Frage