67 lines
1.6 KiB
ObjectPascal
67 lines
1.6 KiB
ObjectPascal
//-----------------------------------------------------------------------
|
|
// A fast timer. Based upon original code (TmwFastTime) by Martin
|
|
// Waldenburg in 1996. This version descends from TObject, so we
|
|
// don't have to mess around installing it on the component palette.
|
|
//-----------------------------------------------------------------------
|
|
|
|
unit FastTime;
|
|
|
|
interface
|
|
|
|
uses
|
|
SysUtils, Windows, Classes;
|
|
|
|
type
|
|
TFastTimer = class(TObject)
|
|
private
|
|
nStart, nStop: TLargeInteger;
|
|
function GetElapsedTime: String;
|
|
function GetElapsed: Extended;
|
|
function GetElapsedMicroSeconds: TLargeInteger;
|
|
public
|
|
property Elapsed: Extended read GetElapsed;
|
|
property ElapsedMicroseconds: TLargeInteger read GetElapsedMicroSeconds;
|
|
property ElapsedTime: String read GetElapsedTime;
|
|
procedure Start;
|
|
procedure Stop;
|
|
end;
|
|
|
|
var
|
|
FastTimer: TFastTimer;
|
|
Frequency: TLargeInteger;
|
|
|
|
implementation
|
|
|
|
function TFastTimer.GetElapsed: Extended;
|
|
begin
|
|
Result:= (nStop - nStart) / Frequency;
|
|
end;
|
|
|
|
function TFastTimer.GetElapsedTime: String;
|
|
begin
|
|
Result := Format ('Seconds: %g', [GetElapsed]);
|
|
end;
|
|
|
|
function TFastTimer.GetElapsedMicroSeconds: TLargeInteger;
|
|
begin
|
|
Result := Trunc (GetElapsed * 1000000.0);
|
|
end;
|
|
|
|
procedure TFastTimer.Start;
|
|
begin
|
|
QueryPerformanceCounter (nStart);
|
|
end;
|
|
|
|
procedure TFastTimer.Stop;
|
|
begin
|
|
QueryPerformanceCounter (nStop);
|
|
end;
|
|
|
|
initialization
|
|
QueryPerformanceFrequency (Frequency);
|
|
FastTimer := TFastTimer.Create;
|
|
finalization
|
|
FastTimer.Free;
|
|
end.
|
|
|