0

我有一个计时器类,它使用本地机器的日期/时间来计算事情已经运行了多长时间,并设置在一段时间后到期的计时器。

我发现如果用户更改系统时间,这会对我的应用程序造成严重破坏,因为计时器突然认为他们已经过期或者他们记录的时间突然跳了一个小时(比如说)。

这些计时器当前通过多线程应用程序使用。

计时器/超时计时器运行时间从几秒到几天不等。

如何避免这些时间不一致?

4

3 回答 3

1

除了您找到的事件之外,您还可以使用Stopwatch之类的东西而不是系统时间来进行计时。

于 2012-08-15T14:04:21.433 回答
1

您可以使用 SystemEvents.TimeChanged 事件来获得通知。

您还需要担心机器的时区或夏令时规则的变化。.NET 通过在第一次检索日期时间时锁定区域来确保不会对计时器造成重大中断。换句话说,它确保计时器在其编程间隔而不是其绝对时间到期。如果这是一个问题(测试它),那么您需要通过调用 CultureInfo.ClearCachedData()(对于 TimeZone 和 DateTime)以及 TimeZoneInfo.ClearCachedData()(对于 TimeZoneInfo 和 DateTimeOffset)来明确清除该状态。

调整机器时钟时,许多其他事情可能会出错。例如文件系统时间戳。Linux 闰秒错误是最近发生的一个有趣事件。拥有可靠的时间源对于保持机器嗡嗡声非常重要,很容易从时间服务器获得。

于 2012-08-15T18:04:19.733 回答
0

在您在 SO 上发布内容之前,Google 搜索为何总是失败?如果其他人想做这样的事情,我发现有一个可以使用的系统事件

于 2012-08-15T09:08:45.877 回答