一、毫秒级
Linux 平台示例(毫秒)
program HighPrecisionTimer;
{$mode objfpc}{$H+}
uses
BaseUnix, SysUtils,Linux;
var
StartTime, EndTime: TTimeSpec;
Elapsed: Double;
begin
// 获取开始时间
clock_gettime(CLOCK_MONOTONIC, @StartTime);
// 你的代码块
Sleep(1); // 示例延时,替换为你的代码
// 获取结束时间
clock_gettime(CLOCK_MONOTONIC, @EndTime);
// 计算耗时(毫秒)
Elapsed := (EndTime.tv_sec - StartTime.tv_sec) * 1e3 + (EndTime.tv_nsec - StartTime.tv_nsec) / 1e6;
WriteLn('Elapsed time: ', Elapsed:0:3, ' ms');
end.
Windows 平台示例(毫秒)
program HighPrecisionTimerWindows;
{$mode objfpc}{$H+}
uses
Windows, SysUtils;
var
Frequency: Int64;
StartCount, EndCount: Int64;
Elapsed: Double;
begin
QueryPerformanceFrequency(Frequency); // 获取计时器频率
QueryPerformanceCounter(StartCount); // 开始计时
// 你的代码块
Sleep(1); // 示例延时,替换为你的代码
QueryPerformanceCounter(EndCount); // 结束计时
// 计算耗时(毫秒)
Elapsed := (EndCount - StartCount) * 1e3 / Frequency; // 计算耗时(毫秒)
WriteLn('Elapsed time: ', Elapsed:0:3, ' ms');
end.
二、微秒级
Linux 平台示例(浮点微秒)
program HighPrecisionTimer;
{$mode objfpc}{$H+}
uses
BaseUnix, SysUtils,Linux;
var
StartTime, EndTime: TTimeSpec;
Elapsed: Double;
begin
// 获取开始时间
clock_gettime(CLOCK_MONOTONIC, @StartTime);
// 你的代码块
Sleep(1); // 示例延时,替换为你的代码
// 获取结束时间
clock_gettime(CLOCK_MONOTONIC, @EndTime);
// 计算耗时(微秒)
Elapsed := (EndTime.tv_sec - StartTime.tv_sec) * 1e6 + (EndTime.tv_nsec - StartTime.tv_nsec) / 1e3;
WriteLn('Elapsed time: ', Elapsed:0:2, ' µs');
end.
Windows 平台示例(浮点微秒)
program HighPrecisionTimerWindows;
{$mode objfpc}{$H+}
uses
Windows, SysUtils;
var
Frequency: Int64;
StartCount, EndCount: Int64;
Elapsed: Double;
begin
QueryPerformanceFrequency(Frequency); // 获取计时器频率
QueryPerformanceCounter(StartCount); // 开始计时
// 你的代码块
Sleep(1); // 示例延时,替换为你的代码
QueryPerformanceCounter(EndCount); // 结束计时
// 计算耗时(微秒)
Elapsed := (EndCount - StartCount) * 1e6 / Frequency; // 计算耗时(微秒)
WriteLn('Elapsed time: ', Elapsed:0:2, ' µs');
end.