WEB开发网
开发学院软件开发VC 一个连续更新,高精度的时间供应器 阅读

一个连续更新,高精度的时间供应器

 2006-07-20 11:38:26 来源:WEB开发网   
核心提示: 所以你如何实际处理 WM_TIMECHNAGE 消息呢?既然你已经有了一个用于周期性同步的线程,唯一你要做的事情就是让你的线程创建一个不可见的顶层窗口,一个连续更新,高精度的时间供应器(7),并且,除了定期同步外还要运行一个消息循环,我将对下载代码中的 time_provider 类作一个

所以你如何实际处理 WM_TIMECHNAGE 消息呢?既然你已经有了一个用于周期性同步的线程,唯一你要做的事情就是让你的线程创建一个不可见的顶层窗口,并且,除了定期同步外还要运行一个消息循环。 

时间调整

与 Windows NT 维护系统时间有关的还有另外一个问题。为了帮助软件例如网络时间协议(Network Time Protocol, NTP)客户端同外部资源保持时间同步,Windows NT 暴露了一个SetSystemTimeAdjustment API。这个API有两个参数,以100纳秒为单位的时间调节器本身以及一个布尔值,它指示 Windows NT 是否禁用时间调节器。当启用时间调节器时,系统会在每个时钟中断时加上指定的时间调节器的值。当禁用时,系统会用添加缺省的时间增量取而代之(在本文中它与时钟间隔一样),更多详情见平台SDK文档。

但是还有两个问题。首先启用(改变)时间调节器改变了参考频率——时间流。第二,也是一个较大的问题,就是当系统时间被修改后,系统不发送启用或禁止通知。即使以最小的 156250 个单位(1单位100纳秒)缺省时间增量改变某个系统上的时间调节器,也将导致参考频率 6.4PPM (1/156250) 的改变。再一次的,听起来可能不多,但是考虑一下你要在50微秒内阻止系统时间起变化,那意味着几秒之后如果没有进行再同步,你就会超过极限。

为了减少这类调整的冲击,时间供应器必须监视当前时间调节器的设置。不用借助于操作系统本身,通过调用SetSystemTimeAdjustment 的伙伴 API GetSystemTimeAdjustment 来实现。在足够短的间隔内不断地执行这个检查并且根据需要调整内部频率,你就能够避免偏离系统时间太远。 

时间供应器

现在你已经对问题的各个方面有了较好的理解,我将对下载代码中的 time_provider 类作一个简单介绍。这个时间供应器是以参数化单模式方式实现的,为客户提供了一个高精度,持续更新的时间:

上一页  2 3 4 5 6 7 8 9  下一页

Tags:一个 连续 更新

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接