C# 哪些计时器取决于系统时间?

C# 哪些计时器取决于系统时间?,c#,.net,datetime,timer,C#,.net,Datetime,Timer,我还没有测试过这个。我希望有人已经知道答案,所以我不必编写测试应用程序,否则我会。:) 通常,当我想比较时间时,我只存储DateTime.Now并在以后比较它。我相信,当用户在这两者之间的某个时间更改用户的系统时,这会给出错误的结果 这让我怀疑计时器是否也有同样的行为。哪些.NET计时器取决于设置的系统时间?考虑启动一个需要在一个小时内消逝的计时器。当我将系统时间提前一小时时,它会触发吗 我从来没有真正关心过这种可能的行为,但在某些情况下它可能很重要。在这种情况下,哪些计时器是安全的,哪些最肯定

我还没有测试过这个。我希望有人已经知道答案,所以我不必编写测试应用程序,否则我会。:)

通常,当我想比较时间时,我只存储
DateTime.Now
并在以后比较它。我相信,当用户在这两者之间的某个时间更改用户的系统时,这会给出错误的结果

这让我怀疑计时器是否也有同样的行为。哪些.NET计时器取决于设置的系统时间?考虑启动一个需要在一个小时内消逝的计时器。当我将系统时间提前一小时时,它会触发吗


我从来没有真正关心过这种可能的行为,但在某些情况下它可能很重要。在这种情况下,哪些计时器是安全的,哪些最肯定是不安全的?

我试图解决类似的问题。我原来是用来代替所有的。将使用高频时钟(如果存在)。因此,它更精确,并且与系统时钟变化无关。然而,如果高频时钟不存在,它将返回到再次使用系统时钟

根据我的测试,我所有的机器都有高频时钟,包括VM中的机器

关于计时器,据我记忆所及,它不依赖于系统时钟。但是,您并不真的想使用计时器来跟踪时间,因为计时器回调事件可能会被其他一些事件延迟。

我只想,因为这是对我的问题最相关的答案


没有一个计时器依赖于系统时间。即,用户 更改时钟不会影响System.Windows.Forms.Timer,
System.Timers.Timer
,或
System.Threading.Timer
。它也不会影响
秒表
环境。滴答声
。此外,也没有“开销”的问题 使用秒表。它不像是不断更新的值。它是 延迟评估(即,
Ticks
在被引用时更新)

文件中说:“秒表测量经过的时间 通过计算基础计时器机制中的计时器计时。如果 已安装的硬件和操作系统支持高分辨率 性能计数器,然后
秒表
类使用该计数器 测量经过的时间。”如果您在高分辨率屏幕上查找信息 性能计数器,您将看到它不依赖于系统 时间

计时器是相似的<代码>系统.线程.计时器基于Windows计时器 排队计时器。请参阅该文档。System.Timers.Timer只是一个 包装
System.Threading.Timer
System.Windows.Forms.Timer
是一个 包装Windows
SetTimer
KillTimer
函数。 这些文件表明,它们不依赖于 系统时间


在RPi Zero上,我看到的是:
如果更改系统时钟,线程睡眠将停止。如果在当前时间之前将时间设置为一个值,然后再将其设置回原来的值,则睡眠将不再起作用。如果您将时间设置为过去的某个时间,然后再设置为当前时间,它将按预期工作。

我并不真正需要事件,我只会将其用于经过的时间,以改进
日期时间。现在
方法。使用秒表感觉很奇怪,因为我不需要超高精度(可能还有额外的开销?)。他们把它放在
Diagnostics
名称空间中肯定有原因。@Steven所有三个计时器类都在一段时间后调用您的回调或引发您的事件
System.Windows.Form.Timer
应使用与其他Windows消息共享同一消息循环的
WM\u Timer
。这就是我的意思。对于其他计时器类,我刚刚尝试了
System.Timers.Timer
,它看起来不依赖于系统时钟。
Stopwatch
的开销应该更低,因为它不需要计算年/月/日信息,它只是一个经过的时间。在许多现代(又称廉价)主板上,Stopwatch.ElapsedTicks是由一个芯片组时间源生成的,该芯片组时间源具有非常高的分辨率,但精度非常差。它并不能替代计时器,计时器通过互联网时间服务器校正校准的时钟滴答声中断运行。秒表只适合比较短的时间间隔。@Steven:CPU中有一个单独的电路,主板上也有一个芯片,专门用于高分辨率计时。没有额外的开销,CPU也不需要更频繁地运行计时器处理代码。如果您有权查询NTP服务器,可以使用简单的方法。感谢您的建议,但对于本地解决方案来说,这有点过头了。:)没有一个计时器依赖于系统时间。也就是说,用户更改时钟不会影响
System.Windows.Forms.Timer
System.Timers.Timer
System.Threading.Timer
。它也不会影响秒表
或环境。滴答声
。此外,使用秒表也没有“开销”。它不像是不断更新的值。它被延迟评估(即,
Ticks
在被引用时被更新)。@JimMischel,这些信息在
MSDN
或“官方”来源中可用吗?@Ofiris:timer是类似的
System.Threading.Timer
基于Windows计时器队列计时器。请参阅该文档
System.Timers.Timer
只是
System.Threading.Timer
的包装
System.Windows.Forms.Timer
是Windows
SetTimer
KillTimer
函数的包装器。这些文件表明它们不依赖于系统时间。