一段时间以来,我一直在使用 C# 制作一个小游戏,在另一台 PC 上测试该游戏时,我遇到了一些奇怪的经过时间问题。
我已经在这个游戏中设置了所有设置,以根据自上次游戏循环以来经过的时间进行更新,在大多数情况下应该这样做,但在第二台 PC 上,一切都已经结束了。
我发现问题与使用该FromTicks()
方法创建 TimeSpan 有关。我使用以下代码做了一个小测试:
class Program
{
static void Main(string[] args)
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1));
sw.Stop();
TimeSpan t = TimeSpan.FromTicks(sw.ElapsedTicks);
Console.WriteLine(t.ToString());
Console.WriteLine(sw.Elapsed.ToString());
Console.ReadKey();
}
}
在我的主 PC 上,我运行了这个程序并得到了以下结果:
00:00:00.3528353 00:00:00.9856987
我完全没想到的东西。我认为第二个结果很不准确,但第一个结果很好。
然后我在另一台 PC 上运行了相同的程序并得到了这个:
00:03:20.6866734 00:00:00.998287
我相当震惊。
我在这里的问题不是我如何解决这个问题,我已经决定使用第二种方法,因为它足够准确......相反,我要求启发。
怎么会这样?为什么第一个结果如此不准确?为什么这在不同的机器上会有很大差异?
我检查了msdn以防我使用错误的方法,但那里的例子表明我的结果应该是不可能的......
注意:
我认为 CMOS 电池快没电了,这是一个因素吗?