【问题标题】:Different values of Stopwatch.Frequency on the same PC同一台 PC 上不同的 Stopwatch.Frequency 值
【发布时间】:2014-04-22 13:59:32
【问题描述】:

我正在开发在线游戏并拥有客户端和服务器。对于我使用 Unity3D 和 C# 的客户端,服务器是用 C# 编写的。对于同步,我使用计时器,正如我们所知,计时器取决于滴答声。 C# 中的滴答计数器是秒表类,1 秒内的滴答计数等于 Stopwatch.Frequency,但在服务器和客户端上,Stopwatch.Frequency 的值是不同的,它会终止我的同步,因为服务器上的计时器太慢,不像打开的计时器客户端。服务器上的 Stopwatch.Frequency 等于 3.124.980,客户端上的 Stopwatch.Frequency 等于 10.000.000。所以为什么???我如何更改 Stopwatch.Frequency 的值以进行计时器同步?感谢和抱歉我的英语不好

【问题讨论】:

  • 您能确认一下:IsHighResolution falsetrue 吗?
  • 有趣;那么,在这种情况下,您只需要使用最低频率或最大公分母......或您定义的任何人工时间单位

标签: c# unity3d frequency stopwatch


【解决方案1】:

Stopwatch 在具有多个处理器的 PC 或不具有恒定时钟速度的处理器(可以降低时钟以节省能源的处理器)上可能不可靠,因此您根本无法在游戏中使用它(因为您希望它可以在每台计算机上运行)。

许多游戏都使用全局监视,我发现即使是最简单的全局监视算法也足以将客户端与游戏服务器同步。看看Cristian's algorithm

拥有全球手表,您可以简单地使用DateTime.UtcNow 来测量时间。

【讨论】:

  • 我差不多一个月前就回答了!
【解决方案2】:

StopWatch.Frequency 无法更改 - 它以每秒滴答数的形式获取计时器的频率。该字段是只读的。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    • 2014-11-23
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多