首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定期时间调整更改的窗口通知

定期时间调整更改的窗口通知
EN

Stack Overflow用户
提问于 2010-08-18 03:41:03
回答 2查看 934关注 0票数 1

我是否可以监控对系统时间调整(由SetSystemTimeAdjustment()更改)的更改?

我需要监控这些变化,以获得高精度的实时光谱图视图。

注意:

我知道每当系统时间改变时都会发送WM_TIMECHANGE。这不是我想要的。

EN

回答 2

Stack Overflow用户

发布于 2010-08-18 03:59:09

这篇MSDN Magazine文章指出,操作系统中没有通知机制-您需要通过轮询GetSystemTimeAdjustment()来监控更改。来自"Implementing a Continuously Updating, High-Resolution Time Provider for Windows" by Johan Nilsson (MSDN Magazine, March 2004)

虽然这样做有几个问题。首先,启用(和更改)时间调整会改变您的参考频率-时间流。第二个是更大的问题,当时间调整被更改、启用或禁用时,系统不会发送通知。在默认时间增量为156250个单位的系统上,即使以可能的最小增量(一个100纳秒单位)更改时间调整,也会导致6.4PPM (1/156250)的参考频率发生变化。同样,这听起来可能不是很多,但考虑到您可能希望将系统时间保持在50微秒以内,这可能意味着您在几秒钟后超过了该限制,而不进行重新同步。

为了减少这种调整的影响,时间提供者必须监控当前的时间调整设置。在没有操作系统本身帮助的情况下,这是通过调用SetSystemTimeAdjustment配套应用程序接口GetSystemTimeAdjustment来实现的。通过以足够短的间隔重复执行此检查,并根据需要调整内部频率,可以避免偏离系统时间太远。

自从这篇文章发表以来,可能已经添加了操作系统级别的通知支持,但我没有找到任何文档。

票数 2
EN

Stack Overflow用户

发布于 2010-08-18 03:43:55

我假设WM_TIMECHANGE被发送给WndProc(),所以您可能希望覆盖WndProc,如下所示:

代码语言:javascript
复制
public override void WndProc(ref Message m) {
    if(m==WM_TIMECHANGE) {
        //dostuff
    }
    base.WndProc();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3506285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档