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

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

 2006-07-20 11:38:26 来源:WEB开发网   
核心提示: template< typename counter_type, int KEEP_WITHIN_MICROS = 100, int SYNCHRONIZE_THREAD_PRIORITY = THREAD_PRIORITY_BELOW_NORMAL, int TUNING_LIMI
template<
     typename counter_type,
     int KEEP_WITHIN_MICROS = 100,
     int SYNCHRONIZE_THREAD_PRIORITY = THREAD_PRIORITY_BELOW_NORMAL,
     int TUNING_LIMIT_PARTSPERBILLION = 100,
     int MAX_WAIT_MILLIS = 10000,
     int MIN_WAIT_MILLIS = 100
>
class time_provider

使用时间供应器获得当前时间类似于使用 Windows API:

typedef hrt::time_provider<hrt::performance_counter>time_provider_t;
time_provider_t& provider=time_provider_t::instance();
SYSTEMTIME st;
provider.systemtime(&st);

Figure 7 解释了time_provider 类可用的模板参数、类型定义和成员函数。你可能会对将不同的调谐参数被指定为模板参数感到奇怪。从我的观点来看,他们全都是设计参数,并且可以在编译时,根据你的应用程序的需求来确定。

Figure 8 的代码示范了使用 time_provider 类在一个小循环中收集原始时间的例子,然后转换和输出。在下载的源代码中你可以找到另外一个使用多线程的例子(在多线程环境中示范了同样的想法)。 

性能因子

那么使用 time_provider 类获得系统时间的开销有多大呢?当你必须计算时间而不只是获取时间时,一些额外的工作是不可避免的。如果你确实关心代码某些临界部分中的性能,使用 Figure 8 中所示的涉及原始计数器值的技术。使用原始值让你延迟系统时间转化,这样不会立即产生额外的开销(调用收集计数器本身的值除外,当然,这是不可避免的)。

Figure 9 的表格中显示得很清楚,它给出了一个 Win32 API 相对于 time_provider 的性能评估。表格中的数字是相对于在Windows XP 对称多处理器(SMP)系统上 GetSystemTime 执行时间的百分比(括号中的数字对应单处理器系统)。

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

Tags:一个 连续 更新

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