2012-02-09 47 views
0

在Delphi XE中有沒有提供與Diagnostics.TStopwatch相同的服務的秒錶類(最好是opensource)?Delphi 2007的秒錶類

+2

試試這個http://delphi.about.com/od/windowsshellapi/a/delphi-high-performance-timer-tstopwatch.htm – RRUZ 2012-02-09 18:27:37

+0

@RRUZ:非常好的資源,但我不確定它的許可證狀態。如果你遷移它,我可以接受它。 – menjaraz 2012-02-09 18:36:18

+0

您可以根據許可證使用情況直接詢問Zarko,但我不認爲這個代碼有任何限制。 – RRUZ 2012-02-09 18:40:22

回答

1

我更傾向於去thisTStopUhr)實施Delphi Praxis論壇找到。

摘錄:

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

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; 
+0

我使用稍微不同的算法來計算流逝的時間:函數TimerElapsed(tick1,tick2:DWORD):DWORD; 開始 如果tick2> = tick1然後{定時器翻轉檢查} 結果:=(tick2 - tick1){normal} else 結果:=(MAXDWORD - tick1)+ tick2; {rollover calculation} end; ' – 2012-02-09 20:15:40

+0

我認爲MAXDWORD-tick1和NOT tick1會做同樣的事情。兩者都做1s補碼(邏輯NOT)。 – 2012-02-10 01:03:01