本文整理自网络,侵删。
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 richedit的实现msn / qq 中的动画表情
Delphi使用tclientdataset时不携带midas.dll的方法
更多相关阅读请进入《Delphi》频道 >>