这个问题实际上是一个古老的问题。TickCount 会有所不同,即使在同一台计算机的多个 CPU 之间也是如此:
http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/22c68353-1dbb-4718-a8d2-0679fdc0c298/
我的建议是将你的 Sleep 设置为高于 8000,比如 9500,并为 tickCount 保持相同的机制,因此 Sleep 应该总是更高。
另一个阅读链接在这里:
http://en.wikipedia.org/wiki/Latency_(engineering)#Computer_hardware_and_operating_system_latency
具体参考 Microsoft Windows 上的段落。
更新:
我不确定为什么这会被否决,但请允许我在这里澄清问题,正如我所看到的那样。
TickCount 不能作为一种特定的时间度量来依赖,除非它被本地化到一个处理单元。MSDN 的第一个链接提供了有关原因的引用。
其次,Windows 本身的计时器逻辑可能存在不准确之处。
最后,就其本身而言,基于 Crystal 的计时器可能会有所不同,因为众所周知,大气条件会影响压电振荡。
http://en.wikipedia.org/wiki/Crystal_oscillator#Temperature_effects
总而言之,TickCount 不可靠,在网络上发送数据包时获得绝对精度在消费级网络上很难实现。
我的解决方案是确保 Sleep 计时器等待的时间比 Tick 计时器更长,这并不优雅,但足以解决问题。
您不能保证一个数据包会在 X 秒内到达,但您可以非常确定它不会在某个持续时间过去之前发送。