{
A high-precision counter/timer. Retrieves time differences downto microsec. Quick Reference: THPCounter inherits from TComponent. Key-Methods: Start: Starts the counter. Place this call just before the code you want to measure. Read: Reads the counter as a string. Place this call just after the code you want to measure. ReadInt: Reads the counter as an Int64. Place this call just after the code you want to measure. -------------------------------------------------------------------------------- } unit HPCounter; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TInt64 = TLargeInteger; THPCounter = class(TComponent) private Frequency: TLargeInteger; lpPerformanceCount1: TLargeInteger; lpPerformanceCount2: TLargeInteger; fAbout: string; procedure SetAbout(Value: string); { Private declarations } public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Start; function Read: string; function ReadInt: TLargeInteger; { Private declarations } published property About: string read fAbout write SetAbout; { Published declarations } end; procedure Register; implementation procedure Register; begin RegisterComponents('MAs Prod.', [THPCounter]); end; constructor THPCounter.Create(AOwner: TComponent); begin inherited Create(AOwner); fAbout:= 'Version 1.1, 2000® Mats Asplund, EMail: masprod@telia.com, Site: http://go.to/masdp'; end; destructor THPCounter.Destroy; begin inherited Destroy; end; function THPCounter.Read: string; begin QueryPerformanceCounter(TInt64((@lpPerformanceCount2)^)); QueryPerformanceFrequency(TInt64((@Frequency)^)); Result:=IntToStr(Round(1000000 * (lpPerformanceCount2 - lpPerformanceCount1) / Frequency)); end; function THPCounter.ReadInt: TLargeInteger; begin QueryPerformanceCounter(TInt64((@lpPerformanceCount2)^)); QueryPerformanceFrequency(TInt64((@Frequency)^)); Result:=Round(1000000 * (lpPerformanceCount2 - lpPerformanceCount1) / Frequency); end; procedure THPCounter.SetAbout(Value: string); begin Exit; end; procedure THPCounter.Start; begin QueryPerformanceCounter(TInt64((@lpPerformanceCount1)^)); end; end. http://lysoft.7u7.net 使用方法: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, HPCounter, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Label1: TLabel; Label2: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Text:= ''; Application.ProcessMessages; with THPCounter.Create(Self) do begin Start; // Place code to measure here Sleep(1000); // Place code to measure here Edit1.Text:=Read; Free; end; end; end. http://lysoft.7u7.net | ||
如何在Delphi中实现精确到微秒级的时钟
最新推荐文章于 2022-11-08 17:39:59 发布