是否有一个秒表类(最好是开源)提供与Delphi XE中的Diagnostics.TStopwatch
相同的服务?
答案 0 :(得分:3)
JCLCounter from Project Jedi与TStopwatch非常相似。
答案 1 :(得分:2)
我意识到它技术含量低,但Win32 API GetTickCount
功能对我来说效果很好。在大多数PC上,分辨率大约为15-20毫秒。
我像这样使用它,没有任何类,但你可以轻松编写自己的类:
function TimerElapsed(tick1,tick2:DWORD):DWORD;
begin
if ((tick2-tick1) < $80000000) then { timer roll-over check }
result := (tick2 - tick1) { normal }
else
result := (not tick1)+tick2; {rollover calculation}
end;
function TimingDemo:Cardinal;
var
time1,time2:Cardinal;
begin
time1 := GetTickCount;
DoSomethingSlow;
time2 := GetTickCount;
result := TimerElapsed(time1,time2); // return elapsed mSec.
end;
答案 2 :(得分:1)
我的偏好是this论坛中的Delphi Praxis( TStopUhr )实现。
摘录:
type
TStopUhr = class
private
FStoppedTime : Int64;
FStartValue : Int64;
FStopValue : Int64;
FStartTime : TDateTime;
FStopTime : TDateTime;
FMethode : TStopUhrMethode;
FMethodeInUse : TStopUhrMethode;
protected
function GetStoppedTimeStr: String;
public
Constructor Create;
Destructor Destroy; Override;
procedure Start;
procedure Stop;
property StartTime : TDateTime read FStartTime;
property StopTime : TDateTime read FStopTime;
property StoppedTime : Int64 read FStoppedTime;
property StoppedTimeStr : String read GetStoppedTimeStr;
property MeasureMethode : TStopUhrMethode Read FMethode Write FMethode;
end;
使用示例:
var
StopUhr : TStopUhr;
begin
StopUhr := TStopUhr.Create;
StopUhr.MeasureMethode := su_TickCount; // default = su_DateTime
StopUhr.Start;
// zu messende Aufgabe
StopUhr.Stop;
ShowMessage(StopUhr.StoppedTimeStr);
StopUhr.Free;
end;
它提供了与问题评论主题中推荐的RRUZ类似的功能。