通过系统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 微秒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值