一、毫秒级

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.

posted on 2024-08-16 20:18  禁卫军  阅读(29)  评论(0编辑  收藏  举报