使用QueryPerformanceFrequency、QueryPerformanceCounter精确计时

发布时间:2016-12-10 20:47:50 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"使用QueryPerformanceFrequency、QueryPerformanceCounter精确计时",主要涉及到使用QueryPerformanceFrequency、QueryPerformanceCounter精确计时方面的内容,对于使用QueryPerformanceFrequency、QueryPerformanceCounter精确计时感兴趣的同学可以参考一下。

一、QueryPerformanceFrequency()-基本介绍类型:Win32API 原型:BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency); 作用:返回硬件支持的高精度计数器的频率。 返回值:非零,硬件支持高精度计数器;零,硬件不支持,读取失败。二、QueryPerformanceCounter()-基本介绍BOOL QueryPerformanceCounter( LARGE_INTEGER *lpPerformanceCount // address of current counter value 当前计数器值的地址 ); 三、LARGE_INTEGER结构-基本介绍数据类型LARGEINTEGER既可以是一个作为8字节长的整数,也可以是作为两个4字节长的整数的联合结构,其具体用法根据编译器是否支持64位而定。该类型的定义如下:typeef union _ LARGE_INTEGER {    struct    {    DWORD LowPart;    LONG HighPart;    };    LONGLONG QuadPart; } LARGE_INTEGER;四、计时在定时前应该先调用QueryPerformanceFrequency()函数获得机器内部计时器的时钟频率。接着在需要严格计时的事件发生前和发生之后分别调用QueryPerformanceCounter(),利用两次获得的计数之差和时钟频率,就可以计算出事件经历的精确时间。测试函数SLEEP(100)的精确持续时间方法:///////////////////////////////////////////////// #include <iostream> #include <windows.h> using namespace std; //////////////////////////////////////////////// void main() { _LARGE_INTEGER time_start; /*开始时间*/ _LARGE_INTEGER time_over; /*结束时间*/ double dqFreq; /*计时器频率*/ LARGE_INTEGER f; /*计时器频率*/ QueryPerformanceFrequency(&f); dqFreq=(double)f.QuadPart; QueryPerformanceCounter(&time_start); Sleep(1000);/*循环耗时*/ QueryPerformanceCounter(&time_over); cout<<((time_over.QuadPart-time_start.QuadPart)/dqFreq)<<endl;//单位为秒,精度为1000 000/(cpu主频)微秒 } 

上一篇:Centos系统sendmail发送邮件很慢和个别报错的解决方法
下一篇:think in java interview-高级开发人员面试宝典(八)

相关文章

相关评论