Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 当日期/时间更改时,如何避免自定义计时器中的计时不一致?_.net_Datetime_Timer_C++ Cli - Fatal编程技术网

.net 当日期/时间更改时,如何避免自定义计时器中的计时不一致?

.net 当日期/时间更改时,如何避免自定义计时器中的计时不一致?,.net,datetime,timer,c++-cli,.net,Datetime,Timer,C++ Cli,我有一个timer类,它使用本地机器的日期/时间来计算运行了多长时间,并设置在特定时间后过期的计时器 我发现,如果用户更改系统时间,这会对我的应用程序造成严重破坏,因为计时器突然认为他们已经过期,或者他们记录的时间突然增加了一个小时(比如) 这些计时器当前通过多线程应用程序使用 计时器/超时计时器的运行时间从几秒钟到几天不等 我怎样才能避免这些时间上的不一致呢?为什么谷歌搜索总是失败,直到你在上面发布一些东西?如果其他人想做类似的事情,我发现有。除了您找到的事件之外,您可以使用类似的方式来计时,

我有一个timer类,它使用本地机器的日期/时间来计算运行了多长时间,并设置在特定时间后过期的计时器

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

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

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


我怎样才能避免这些时间上的不一致呢?

为什么谷歌搜索总是失败,直到你在上面发布一些东西?如果其他人想做类似的事情,我发现有。

除了您找到的事件之外,您可以使用类似的方式来计时,而不是使用系统时间。

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

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


当机器的时钟被调整时,许多其他的事情可能会出错。例如,文件系统时间戳。Linux闰秒bug是最近发生的一个有趣的事件。拥有一个稳定的时间源对于保持机器运转非常重要,可以很容易地从时间服务器获取。

试试秒表。见David Yaw的答案。秒表也更精确。