一、毫秒級
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.