我一直在使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
在我的主PC上,我运行了这个程序,得到了以下内容:
00:00:00.3528353
00:00:00.9856987
我完全没想到的东西.我认为第二个结果是非常不准确的,但第一个结果很好.
然后我在另一台PC上运行相同的程序,得到了这个:
00:03:20.6866734
00:00:00.998287
我很震惊.
我的问题不是我如何解决这个问题,我已经决定使用第二种方法,因为它足够准确......相反,我要求启蒙.
怎么会这样呢?为什么第一个结果如此不准确?为什么这在不同的机器上变化很大?
我检查msdn以防我使用该方法错误,但那里的例子表明我的结果应该是不可能的......
注意:
我认为CMOS电池正在死亡/死亡,这是一个因素吗?