一个连续更新,高精度的时间供应器
2006-07-20 11:38:26 来源:WEB开发网核心提示: Figure 6 显示了某个 13 分钟时段高精度时间偏离系统时间的情况,蓝线显示的是在偏离值达到所允许的系统时间偏离值(本例子中是 50 微秒)之前应用周期性再同步的情况,一个连续更新,高精度的时间供应器(6),它也表明每次执行后在同步之间的时间增加值,这是因为当前实现的时间供应器适应了
Figure 6 显示了某个 13 分钟时段高精度时间偏离系统时间的情况。蓝线显示的是在偏离值达到所允许的系统时间偏离值(本例子中是 50 微秒)之前应用周期性再同步的情况。它也表明每次执行后在同步之间的时间增加值。这是因为当前实现的时间供应器适应了性能计数器所报告的频率计量错误,并不断地将之应用到内部的高精度时间计算上。
虽然蓝线显示的数据应用了平滑过滤,黄线显示了与系统时间偏差的原始数据。这个过滤是实时完成的,并且这是实际用于决定性能计数器真正频率以及高精度时间与系统时间之间偏离的数据。更多细节,请见下载的源代码。
防止系统时间受到更改
另外还有系统时间变化的问题。无论何时发生这种事情,你必须立即再同步以便保证计算的时间是正确的。在 Windows 2000 和 Windwos XP 下这到这一点并不困难,因为每当设置系统系统时间时,系统总会广播一个 WM_TIMECHANGE 消息到所有的顶层窗口。不幸的是,在 Windows NT 以及更早的版本这不是被强制的,尽管在 SDK 文档中确实如是说:在改变系统时间后,应用程序应该发送这个消息到所有的顶层窗口。注意这个句子使用的是“应该”,所以你不能依赖每个人都这么做。
为了透彻地理解这个问题,我应该说改变系统时间对于任何应用程序来说不什么特别的事情。为了改变系统时间或相关的配置,需要启用 SE_SYSTEMTIME_NAME 优先权。如果用户没有启用这个权利,你可以在一个管理员帐户下运行程序,要管理员将这个程序安装为 Windows NT服务,或者要管理员给运行该程序的帐户一个必须的权限。例如,对于 Windows NT 4.0 而言,你最希望的是系统管理员不会或者不允许安装病态程序(即改变系统时间而不知会其它应用程序)。
更多精彩
赞助商链接