Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.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
C# windows系统时间从NTP时间更新更改时是否发生事件?_C#_Windows_Datetime - Fatal编程技术网

C# windows系统时间从NTP时间更新更改时是否发生事件?

C# windows系统时间从NTP时间更新更改时是否发生事件?,c#,windows,datetime,C#,Windows,Datetime,我希望在我的C#应用程序中更改Windows系统日期/时间时收到通知。我发现了该事件,MSDN文档中显示: 当用户更改系统时钟上的时间时发生 如果NTP更改时钟,是否也会触发此事件?或者我可以订阅其他活动吗 实施细节: 我想要一个计时器。在特定日期/时间触发已用事件。我的代码计算计时器所需的时间间隔。如果系统时间发生变化,则需要重新评估此计算,以计算出新的间隔并更新计时器 答案摘要 谢谢你的评论。我将其总结如下,以供将来参考: SystemEvents.TimeChanged在用户更改以及系统

我希望在我的C#应用程序中更改Windows系统日期/时间时收到通知。我发现了该事件,MSDN文档中显示:

当用户更改系统时钟上的时间时发生

如果NTP更改时钟,是否也会触发此事件?或者我可以订阅其他活动吗

实施细节:

我想要一个计时器。在特定日期/时间触发已用事件。我的代码计算计时器所需的时间间隔。如果系统时间发生变化,则需要重新评估此计算,以计算出新的间隔并更新计时器

答案摘要

谢谢你的评论。我将其总结如下,以供将来参考:

  • SystemEvents.TimeChanged在用户更改以及系统调用与NTP服务器重新同步时激发
  • 如果在windows服务中运行,则需要处理消息泵以获取TimeChanged事件。这可以通过运行调度器来实现

  • NTP服务器不应用离散的系统日期更改。考虑到计算的时钟漂移和本地时钟与其他NTP服务器之间的偏移,逐步应用NTP时钟调整
  • 对于我的实现,最好定期评估计时器间隔,以考虑任何系统时间变化,而不是只设置一次时间间隔,然后让它触发

是,
TimeChanged
在您将Windows配置为使用NTP服务器保持时间最新以及有人手动更改时间时引发


这里需要注意的一点是,您必须有一个UI。(或启动一个隐藏窗口以获取消息)。也就是说,您无法在Windows服务中获取TimeChanged事件。

是的,
TimeChanged
在您将Windows配置为使用NTP服务器使时间保持最新以及有人手动更改时间时引发


这里需要注意的一点是,您必须有一个UI。(或启动一个隐藏窗口以获取消息)。也就是说,您无法在Windows服务中获得TimeChanged事件。

WM_TIMECHANGE-谢谢@StuartDunkeld,我刚刚在Reflector中查看了SystemEvents,TimeChanged事件在内部使用WindowProc本机方法。这是否意味着任何时间更改事件都将调用SystemEvents.TimeChanged?如果您希望每次NTP服务器调整时间时都有一个事件,我怀疑您是否会得到一个事件。考虑到计算的时钟漂移和本地时钟与其他NTP服务器之间的偏移量,NTP通过减慢或加快时钟来连续调整时钟。这些调整不是离散的跳跃,而是回转。谢谢你,塞拉达。这是否意味着使用上述实现是安全的?或者我应该定期重新评估下一个间隔以获得更高的精度?NTP时钟调整是逐渐应用的,通常以每时钟中断100纳秒的速率进行。它可以补偿闰秒和时钟漂移,而不会打乱依赖于时钟稳定前进的进程。有关详细信息,请参阅GetSystemTimeAdjustment()的MSDN文章。WM_TIMECHANGE-谢谢@StuartDunkeld,我刚刚在Reflector中查看了SystemEvents,TimeChanged事件在内部使用WindowProc本机方法。这是否意味着任何时间更改事件都将调用SystemEvents.TimeChanged?如果您希望每次NTP服务器调整时间时都有一个事件,我怀疑您是否会得到一个事件。考虑到计算的时钟漂移和本地时钟与其他NTP服务器之间的偏移量,NTP通过减慢或加快时钟来连续调整时钟。这些调整不是离散的跳跃,而是回转。谢谢你,塞拉达。这是否意味着使用上述实现是安全的?或者我应该定期重新评估下一个间隔以获得更高的精度?NTP时钟调整是逐渐应用的,通常以每时钟中断100纳秒的速率进行。它可以补偿闰秒和时钟漂移,而不会打乱依赖于时钟稳定前进的进程。有关详细信息,请参阅GetSystemTimeAdjustment()的MSDN文章。谢谢。在从命令行运行“w32tm/resync”时,我能够跳转到事件处理程序中,这是个好兆头。关于警告的好提示。如果我创建了一个dispatcher并运行它,我应该能够在Windows服务中获取事件,不是吗?谢谢。在从命令行运行“w32tm/resync”时,我能够跳转到事件处理程序中,这是个好兆头。关于警告的好提示。如果我创建一个调度程序并运行它,我应该能够在Windows服务中获取事件,不是吗?