一个连续更新,高精度的时间供应器
2006-07-20 11:38:26 来源:WEB开发网核心提示: 我的目标不是纳秒,而仅是毫秒精度,一个连续更新,高精度的时间供应器(2),它应该能够从 SYSTEMTIME 结构中判断,让我们看一下输出结果:20:12:23.47920:12:23.47920:12:23.49420:12:23.494[...有很多被移去了...]20:12:23.4
我的目标不是纳秒,而仅是毫秒精度,它应该能够从 SYSTEMTIME 结构中判断。让我们看一下输出结果:
20:12:23.479
20:12:23.479
20:12:23.494
20:12:23.494
[...有很多被移去了...]
20:12:23.494
20:12:23.509
20:12:23.509
20:12:23.509
...
正如你所看到的,我所能得到的最好的精度是15毫秒,这是 Windows NT 时钟周期的长度。每过一个时钟周期,Windows NT都会更新系统时间。Windows NT调度器也会 突然启动并可能选择一个新的线程来执行。关于这方面的更多信息,请看《Inside Windows 2000》第三版(Microsoft Press®, 2000),作者是 David Solomon 和 Mark Russinovich。
如果你运行我刚才所示的代码,你也许会看到时间大约是每10毫秒更新一次。如果是那样,可能意味着你是在单处理器的机器上运行 Windows NT,其时钟周期通常为10毫秒。正如你所看到的, 在这种方法中,系统时间更新频率不够快,不足以成为一种为我所用的技术。下面我们就来尝试找一个解决方案。
最初的尝试
当你询问如何得到一个比10毫秒精度更好的系统时间时,你也许会得到下面这样的回答:使用性能计数器,并让性能计数器值和即时变化的系统时间同步。结合这些值来计算一个 精度极高的当前时间。Figure 2 显示了实现方法。
性能计数器是一个高精度的硬件计数器,它能高精确、低开销地计量一个短周期时间。我通过在一个紧凑循环内不断重复把性能计数器值和对应的系统时间进行同步,等待系统时间变化。当系统时间 以变,我就保存计数器的值及系统时间。
使用这两个值作为参考,就有可能计算出一个高精度的当前系统时间(详情见 Figure 2 中的get_time),看一下结果:
更多精彩
赞助商链接