通过系统API函数实现精确记时

原创 2016年02月12日 13:05:27

var C1, T1,T2:int64;
    R1,R2,R3:double;
begin
  QueryPerformanceFrequency(c1);   // WINDOWS API 返回计数频率(获得系统的高性能频率计数器在一毫秒内的震动次数)
  QueryPerformanceCounter(t1);     // WINDOWS API 获取开始计数值
  sleep(1111);                     // 需要计时的程序代码
  QueryPerformanceCounter(t2);     // 获取结束计数值
  R1:=(T2-T1)/C1;                  // 取得计时时间,单位秒(s)
  R2:=(T2-T1)/C1*1000;             // 取得计时时间,单位毫秒 (ms)
  R3:=(T2-T1)/C1*1000000;          // 取得计时时间,单位微秒
  Memo1.Lines.Add(Floattostr(R1)+'秒');
  Memo1.Lines.Add(Floattostr(R2)+'毫秒');
  Memo1.Lines.Add(Floattostr(R3)+'微秒');
end;

原理:利用Windows API函数实现精确记时的方法。
    1、QueryPerformanceFrequency
    QueryPerformanceFrequency函数获得高性能频率记数器的震荡频率。调用该函数后,函数会将系统频率记数器的震荡频率(每毫秒)保存到一个LargeInteger中。
    2、QueryPerformanceCounter。
    QueryPerformanceCounter函数获得系统频率记数器的震荡次数,结果也保存到一个Largenteger中。

    这样,就可以计算出二个时段,之间的差距了。
    1、首先使用QueryPerformanceFrequency获得高性能频率记数器每毫秒的震荡次数,
    2、然后在计时开始时使用QueryPerformanceCounter函数获得当前系统频率记数器的震荡次数。
    3、在计时结束时再调用QueryPerformanceCounter函数获得系统频率记数器的震荡次数。
    将两者相减,再将结果除以频率记数器每毫秒的震荡次数,就可以获得某一事件经过的准确时间。(次数除以频率等于时间)

结果:
    1.11026877822618 秒
    1110.26877822618 毫秒
    1110268.77822618 微秒

Atitit. 包厢记时系统 的说明,教程,维护,故障排查手册v2 pb25.doc

Atitit. 包厢记时系统 的说明,教程,维护,故障排查手册v2 pb25.doc     1. 服务器方面的维护1 1.1. 默认情况下,已经在系统的启动目录下增加了 个启动项目1 1....
  • attilax
  • attilax
  • 2015年12月25日 19:31
  • 408

VC记时函数测试

  • 2008年05月11日 12:35
  • 80KB
  • 下载

Atitit.播放系统的选片服务器,包厢记时系统 的说明,教程,维护,故障排查手册p825

Atitit.播放系统的选片服务器,包厢记时系统 的说明,教程,维护,故障排查手册p825     1. 播放系统服务器方面的维护 2 1.1. 默认情况下,已经在系统的启动目录下增加了俩个...
  • attilax
  • attilax
  • 2015年08月30日 19:09
  • 972

STM32精确延时函数

  • 2014年03月06日 12:26
  • 830B
  • 下载

11。052MHz单片机精确延时函数

  • 2009年03月29日 22:14
  • 4KB
  • 下载

Unity UGUI 多张图片合成一张 记时 显示ICO

如果没有生成图集的话,一般我在使用数字记数时都是用很多个Image组件来显示, 现在使用GetPixels32和SetPixels32将多张图片合并为一张,实测,十张60*90的图片, 合并成一张...

VB精确延时函数 源码

  • 2010年06月22日 19:48
  • 2KB
  • 下载

NetTime网络记时(C++Builder源代码)

  • 2006年03月16日 00:00
  • 344KB
  • 下载

谈谈从库函数API和C代码中嵌入汇编两种方式来实现系统调用

程  序 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000         先来谈谈...
  • p222p
  • p222p
  • 2017年03月09日 10:31
  • 130

钟表记时

  • 2006年02月23日 09:05
  • 33KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过系统API函数实现精确记时
举报原因:
原因补充:

(最多只允许输入30个字)