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


本文整理自网络,侵删。

 
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 微秒
――――――――――――――――

原文链接:https://blog.csdn.net/lyhoo163/article/details/50488981

相关阅读 >>

Delphi判断文件夹(目录)是否存在,不存在就创建一个

Delphi 限制edit输入 多个例子

Delphi tsearchrec

Delphi中二进制文件数据存文件方法

Delphi释放内存一般这么写

Delphi tscrollbar 用于滚动窗口、组件内容

Delphi richedit的实现msn / qq 中的动画表情

Delphi使用tclientdataset时不携带midas.dll的方法

Delphi 关于动态数组指针操作的两个例子

Delphi xe2创建apple ios程序

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...