在同一台PC上使用不同的Stopwatch.Frequency值

时间:2014-03-17 11:26:19

标签: c# unity3d frequency stopwatch

我正在开发在线游戏并拥有客户端和服务器。对于客户端我使用Unity3D和C#,服务器是用C#编写的。对于同步我使用计时器,因为我们知道计时器取决于刻度。 C#中的刻录计数器是类秒表,1秒内的刻度计数等于秒表。频率,但在服务器和客户端上,Stopwatch.Frequency的值不同,它会导致我的同步,因为服务器上的计时器太慢而不像计时器客户端。服务器上的Stopwatch.Frequency等于3.124.980,客户端上的Stopwatch.Frequency等于10.000.000。所以为什么???如何更改Stopwatch.Frequency的定时器同步值?谢谢,抱歉我的英文不好

2 个答案:

答案 0 :(得分:1)

在具有多个处理器的PC或具有恒定时钟速度的处理器(可以减少时钟以节省能量的处理器)上,

Stopwatch可能不可靠,因此您根本无法在游戏中使用它(因为你希望它能在每台计算机上运行)。

许多游戏都使用全球手表,而且我已经看到,即使是最简单的全球手表算法也足以让客户端与游戏服务器同步。看看Cristian's algorithm

拥有全局监控,您只需使用DateTime.UtcNow来衡量时间。

答案 1 :(得分:1)

无法更改StopWatch.Frequency - 它将定时器的频率作为每秒的滴答数。该字段是只读的。

秒表类使用的计时器取决于系统硬件和操作系统

如果秒表计时器基于高分辨率性能计数器,则 Stopwatch.IsHighResolution 字段为true。否则,IsHighResolution为false,在这种情况下,它表示秒表计时器基于系统计时器