unit mwFastTime; interface uses type procedure Register; {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~} procedure Register; constructor TmwFastTime.Create(AOwner: TComponent); destructor TmwFastTime.Destroy; function TmwFastTime.GetElapsed: Extended; {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~} function TmwFastTime.GetElapsedTime: ShortString; {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~} Procedure TmwFastTime.Start; Procedure TmwFastTime.Stop; end.
SysUtils, Windows, Classes;
TmwFastTime = class(TComponent)
private
c, n1, n2: TLargeInteger;
function GetElapsedTime: ShortString;
function GetElapsed: Extended;
protected
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
Property Elapsed: Extended read GetElapsed;
Property ElapsedTime: ShortString read GetElapsedTime;
Procedure Start;
Procedure Stop;
published
Property Name;
Property Tag;
end;
implementation
begin
RegisterComponents(mw, [TmwFastTime]);
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
begin
inherited Create(AOwner);
QueryPerformanceFrequency(c);
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
begin
inherited Destroy;
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
begin
{$IFDEF VER120}
Result:= (_LARGE_INTEGER(n2).QuadPart – _LARGE_INTEGER(n1).QuadPart) / _LARGE_INTEGER(c).QuadPart;
{$ELSE}
Result:= (n2.QuadPart – n1.QuadPart) / c.QuadPart;
{$ENDIF}
end;
begin
{$IFDEF VER120}
Result := format(Seconds: %g, [GetElapsed]);
{$ELSE}
Result := format(Seconds: %g, [GetElapsed]);
{$ENDIF}
end;
begin
QueryPerformanceCounter(n1);
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
begin
QueryPerformanceCounter(n2);
end;