Delphi 2007的秒表课程

时间:2012-02-09 18:25:23

标签: delphi delphi-2007 stopwatch

是否有一个秒表类(最好是开源)提供与Delphi XE中的Diagnostics.TStopwatch相同的服务?

3 个答案:

答案 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类似的功能。