`
hanyezhiyu8
  • 浏览: 153601 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

利用高精度计时器计算程序运行时间

阅读更多
QueryPerformanceFrequency()
类型:Win32API
原型:BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
作用:返回硬件支持的高精度计数器的频率。
返回值:非零,硬件支持高精度计数器;零,硬件不支持,读取失败。
 
QueryPerformanceCounter
原型:BOOL QueryPerformanceCounter(LARGE_INTEGER *ipPerformanceCount);   
返回值:如果安装的硬件支持高精度计时器,函数将返回非0值如果安装的硬件不支持高精度计时器,函数将返回0作用:用于得到高精度计时器的值(如果存在这样的计时器)
参数:LARGE_INTEGER *ipProformanceCount   
为一个指针变量用于函数传值,即指向现时计数器的值.
如果安装的硬件不支持高精度计时器,该参数将返回0.
 
数据类型LARGEINTEGER既可以是一个作为8字节长的整数,也可以是作为两个4字节长的整数的联合结构,其具体用法根据编译器是否支持64位而定。该类型的定义如下:
  typeef union _ LARGE_INTEGER
  {
         struct
            {
                   DWORD LowPart;
                      LONG HighPart;
            };
            LONGLONG QuadPart;
  } LARGE_INTEGER;
 
在定时前应该先调用QueryPerformanceFrequency()函数获得机器内部计时器的时钟频率。
接着在需要严格计时的事件发生前和发生之后分别调用QueryPerformanceCounter(),利用两次获得的计数之差和时钟频率,就可以计算出事件经历的精确时间。
测试函数SLEEP(100)的精确持续时间方法:
    LARGE_INTEGER litmp;
    LONGLONG qt1,qt2;
    double dft,dff,dfm;
    QueryPerformanceFrequency(&litmp);//获得时钟频率
    dff=(double)litmp.QuadPart;
    QueryPerformanceCounter(&litmp);//获得初始值
    qt1=litmp.QuadPart;Sleep(100);
    QueryPerformanceCounter(&litmp);//获得终止值
    qt2=litmp.QuadPart;
    dfm=(double)(qt2-qt1);
    dft=dfm/dff;//获得对应的时间值
需要注意的是DFT计算的结果单位是秒。
 
例子:

LARGE_INTEGER  frequency;
LARGE_INTEGER  startTime;
LARGE_INTEGER  endTime;   

//获取是否支持精确定时器
BOOL bRes = QueryPerformanceFrequency(&frequency);
if (TRUE == bRes)
{
    //Record the start time
    QueryPerformanceCounter(&startTime);

    //Execute Program

    //Record the end time
    QueryPerformanceCounter(&endTime);

    //Calculate the cost time
    double dInterval = (double)(endTime.QuadPart - startTime.QuadPart);
    double dCostTime = dInterval / (double)frequency.QuadPart * 1000.0; 
}

 

分享到:
评论

相关推荐

    贺兰_电子钢琴 2.0.5(源代码)

    2、改用高精度计时器(1毫秒级别的,修正了原计时器控件问题。)播放。 若传入命令行参数设置计时器间隔为1毫秒,左右手谱同步问题已基本解决! 一般自动识别,若是左右手谱,自动设置为1毫秒!(2013-11-06) 3...

    贺兰_电子钢琴 2.0.4(简单发布)

    2、改用高精度计时器(1毫秒级别的,修正了原计时器控件问题。)播放。 若传入命令行参数设置计时器间隔为1毫秒,左右手谱同步问题已基本解决! 一般自动识别,若是左右手谱,自动设置为1毫秒!(2013-11-06) 3...

    课程设计-基于C51单片机的自动打铃系统.doc

    (2)进行软件设计,利用单片机系统时钟先设计一个高精度的内部时钟系统,最小精确时间为期1秒; (3)在秒计数器的基础上设计一个24小时时钟,并设计若干定时功能; (4)设计打铃执行机构,完成自动打铃功能。 2.2各...

    单片机设计电子打铃器.docx

    (2)进行软件设计,利用单片机系统时钟先设计一个高精度的内部时钟系统,最小精确时间为期1秒;(3)在秒计数器的基础上设计一个24小时时钟,并设计若干定时功能; (4)设计打铃执行机构,完成自动打铃功能。 2.2各功能...

    单片机设计电子打铃器-.docx

    (2)进行软件设计,利用单片机系统时钟先设计一个高精度的内部时钟系统,最小精确时间为期1秒; (3)在秒计数器的基础上设计一个24小时时钟,并设计若干定时功能; (4)设计打铃执行机构,完成自动打铃功能。 2.2各...

    单片机设计电子打铃器.doc

    (2)进行软件设计,利用单片机系统时钟先设计一个高精度的内部时钟系统,最小精确 时间为期1秒; (3)在秒计数器的基础上设计一个24小时时钟,并设计若干定时功能; (4)设计打铃执行机构,完成自动打铃功能。 2.2各...

    单片机设计电子打铃器(1).doc

    (2)进行软件设计,利用单片机系统时钟先设计一个高精度的内部时钟系统,最小精确 时间为期1秒; (3)在秒计数器的基础上设计一个24小时时钟,并设计若干定时功能; (4)设计打铃执行机构,完成自动打铃功能。 2.2各...

    c语言编写单片机技巧

    嵌入式DSP专门用来处理对离散时间信号进行极快的处理计算,提高编译效率和执行速度。在数字滤波、FFT(Fast Fourier Transform)、频谱分析、图像处理的分析等领域,DSP正在大量进入嵌入式市场。 18. MCU在...

    基于89C51单片机的秒表课程设计(2).doc

    利用单片机的定时器/计数器定时和计数的原理, 用集成电路芯片、LCD1602液晶以及按键来设计计时器。将软、硬件有机地结合起来,使 它拥有正确的计时、暂停、清零、所计时间的存储和查看、并同时可以用液晶显示,在 ...

    timexe:另一个cron克隆-但是这个克隆更好

    Timexe-类似于Cron的计时器和调度程序,具有毫秒级的分辨率也可以在浏览器中使用特征毫秒解析度改进的cron式语法重新计算长时间运行的计时器,以提高准确性没有依赖关系适用于节点JS和浏览器包含时间表达式包括范围...

    基于AT89S52 单片的频率计

    器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。 对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛 第5 页共27 页 盾和现象。 3 系统详细设计: 3.1 硬件设计 3.1.1 ...

    JAVA_API1.6文档(中文)

    javax.management.timer 提供对 Timer MBean(计时器 MBean)的定义。 javax.naming 为访问命名服务提供类和接口。 javax.naming.directory 扩展 javax.naming 包以提供访问目录服务的功能。 javax.naming.event ...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例202 计算程序运行时间 257 实例203 从控制台输入密码 258 9.4 Math类的使用 259 实例204 角度和弧度的转换 259 实例205 三角函数的使用 260 实例206 反三角函数的使用 261 实例207 双曲函数的使用 262 实例208 ...

    java api最新7.0

    javax.management.timer 提供对 Timer MBean(计时器 MBean)的定义。 javax.naming 为访问命名服务提供类和接口。 javax.naming.directory 扩展 javax.naming 包以提供访问目录服务的功能。 javax.naming.event 在...

    JavaAPI1.6中文chm文档 part1

    javax.management.timer 提供对 Timer MBean(计时器 MBean)的定义。 javax.naming 为访问命名服务提供类和接口。 javax.naming.directory 扩展 javax.naming 包以提供访问目录服务的功能。 javax.naming.event ...

    JavaAPI中文chm文档 part2

    javax.management.timer 提供对 Timer MBean(计时器 MBean)的定义。 javax.naming 为访问命名服务提供类和接口。 javax.naming.directory 扩展 javax.naming 包以提供访问目录服务的功能。 javax.naming.event ...

    [Java参考文档]

    javax.management.timer 提供对 Timer MBean(计时器 MBean)的定义。 javax.naming 为访问命名服务提供类和接口。 javax.naming.directory 扩展 javax.naming 包以提供访问目录服务的功能。 javax.naming.event ...

Global site tag (gtag.js) - Google Analytics