Ste*_*ris 13 .net c# datetime timer
我还没有测试过这个.我希望有人已经知道答案,所以我不必编写测试应用程序,否则我会.:)
通常当我想比较时间时,我只是DateTime.Now在以后存储和比较它.我相信当用户在两者之间的某处更改用户的系统时间时,这会产生错误的结果.
这让我想知道计时器的行为方式是否相同.哪些.NET计时器依赖于设置的系统时间?考虑启动一个需要在一小时内过去的计时器.当我将系统时间设置为一小时后会触发吗?
我从来没有真正关心这种可能的行为,但在某些情况下它可能很重要.哪些计时器可以安全地对付这种情况,哪些计时器绝对不是?
我试图解决类似的问题.我结果System.Diagnostic.StopWatch用来替换所有DateTime.Now. StopWatch将使用高频时钟(如果存在).因此,它更准确,独立于系统时钟变化.但是,如果不存在高频时钟,它将再次回退使用系统时钟.
根据我的测试,我的所有机器都有高频时钟,包括VM中的机器.
关于Timer,据我记忆,它不依赖于系统时钟.但是,您并不真的想使用Timer来跟踪时间,因为Timer回调事件可能会被其他一些事件推迟.
我只会引用吉姆·米歇尔的评论,因为这是与我的问题最相关的答案。
所有计时器都不依赖于系统时间。也就是说,用户改变时钟不会影响
System.Windows.Forms.Timer、System.Timers.Timer、 或System.Threading.Timer。也不会影响Stopwatch或Environment.TickCount。此外,使用Stopwatch. 值并不是不断更新的。它是惰性评估的(即Ticks在引用时更新)。文档中
Stopwatch说:“Stopwatch通过计算底层计时器机制中的计时器滴答数来测量经过的时间。如果安装的硬件和操作系统支持高分辨率性能计数器,则该类Stopwatch使用该计数器来测量经过的时间。” 如果您查找有关高分辨率性能计数器的信息,您会发现它不依赖于系统时间定时器是类似的。
System.Threading.Timer基于 Windows 定时器队列定时器。请参阅该文档。System.Timers.Timer 只是 .Timer 的包装System.Threading.Timer。System.Windows.Forms.Timer是 WindowsSetTimer和KillTimer函数的包装器。这些文件表明它们不依赖于系统时间。
| 归档时间: |
|
| 查看次数: |
4618 次 |
| 最近记录: |