Sleep / Wait sin consumir CPU

Así que estoy simulando esta aplicación de teléfono inteligente para Windows. Es un juego que ejecuta su lógica y métodos de dibujo en un1/60 tarifa. En milisegundos esto es16.6667

He implementado este bucle de juego:

    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 proviene de unNanoStopwatch clase, que devuelve el tiempo en milis endouble. Lo cual es útil porque este gameloop tiene que ser realmente preciso para que todo funcione.

Como probablemente sabes, elThread.Sleep consumirá mucha CPU aquí. Probablemente porque requiereint millis que convertirá miTimeSpan a 0 milisegundos.

Hace poco me encontré con esta cosa llamadaWaitHandle, pero todo lo que veo usaint millis. Realmente necesito hacer esto exacto, así que realmente necesitodouble millis omicroseconds/nanoseconds.

¿Hay algo en C # que me permitaWait por x cantidad de microsegundos. No me importa crear algo yo mismo (como lo hice para elNanoStopwatch), pero necesito que me apunten en la dirección correcta. Encontré mucho en internet, pero todo usaint millis y eso no es lo suficientemente preciso para mí.

Ejecuté algunas pruebas cambiando elSleep usar algo como:UPDATE_RATE - (Program.TimeInMillis - startTime) lo que no hace que mi gameloop sea preciso.

Espero que todo esté lo suficientemente claro, si necesita más información simplemente deje un comentario.

tl; dr - ¿Hay alguna manera de dejar que un hilo espere una cantidad demicroseconds/nanoseconds enC#? Mi gameloop debe ser preciso y milisegundos no es lo suficientemente preciso para mí.

¡Gracias por adelantado!

Respuestas a la pregunta(1)

Su respuesta a la pregunta