所以我正在将这个智能手机应用程序模拟到 Windows。这是一个运行其逻辑并绘制方法的游戏1/60
速度。以毫秒为单位,这是16.6667
我已经实现了这个游戏循环:
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
来自一个NanoStopwatch
类,返回以毫秒为单位的时间double
。这很有用,因为这个游戏循环必须非常准确才能使一切正常运行。
您可能知道,Thread.Sleep
这里会消耗大量的CPU。可能是因为需要int millis
这将转换我的TimeSpan
到 0 毫秒。
我最近遇到了一个叫做WaitHandle
,但我看到的一切都使用int millis
。我真的需要使其准确,所以我实际上需要double millis
or microseconds/nanoseconds
.
C# 中有什么东西可以让我Wait
x 微秒量。我不介意自己创造一些东西(就像我为NanoStopwatch
),但我需要指出正确的方向。网上找了很多,不过都是用的int millis
这对我来说不够准确。
我进行了一些测试,改变了Sleep
使用类似的东西:UPDATE_RATE - (Program.TimeInMillis - startTime)
这并不能让我的游戏循环准确。
我希望一切都足够清楚,如果您需要更多信息,请发表评论。
tl;dr - 有什么方法可以让线程等待一段时间microseconds/nanoseconds
in C#
?我的游戏循环需要准确,而毫秒对我来说还不够准确。
提前致谢!