我使用delphi语言,我需要以微秒计算进程的时间。
我可以用小时秒和毫秒计算时间,是否有任何以微秒为单位的计算时间函数?
答案 0 :(得分:6)
有一个依赖于CPU的高分辨率性能计数器"您可以使用QueryPerformanceCounter()
API调用进行访问。
QueryPerformanceCounter()
为您提供该效果计数器的值。 (从历史上看,性能计数器只是CPU周期的计数,但超线程和多核CPU已经使其不可靠,所以现在只测量一些非常小的时间间隔,<1us)
要了解这个时间单位,请使用QueryPerformanceFrequency()
。这为您提供了每秒高分辨率性能计数器单元的数量。为了获得每微秒的数量,除以1000000.在我的Sandy Bridge i7上,它每微秒大约35个单位。
一些代码:
使用QueryPerformanceCounter
来衡量某些代码的执行时间:
var
StartTime, EndTime, Delta: Int64;
begin
QueryPerformanceCounter(StartTime);
//Code you want to measure here
QueryPerformanceCounter(EndTime);
Delta := EndTime - StartTime;
//Show Delta so you know the elapsed time
end;
使用QueryPerformanceFrequency
查找微秒内有多少高分辨率单位:
var
Frequency, UnitsPerMS: Int64;
begin
QueryPerformanceFrequency(Frequency);
UnitsPerMS := Frequency div 1000000;
end;
答案 1 :(得分:4)
听起来我真正想要使用的是TStopWatch
类型。这为QueryPerformanceCounter()
和相关API提供了Delphi包装,并隐藏了您的所有详细信息。这是System.Diagnostics
单元,可从Delphi 2010获得。