2012-02-09 20 views
0

Delphi XEのDiagnostics.TStopwatchと同じサービスを提供するストップウォッチクラス(好ましくはオープンソース)はありますか?Delphi 2007のストップウォッチクラス

+2

これを試してみてくださいhttp://delphi.about.com/od/windowsshellapi/a/delphi-high-performance-timer-tstopwatch.htm – RRUZ

+0

@RRUZ:非常に優れたリソースですが、ライセンスステータスがわかりません。あなたがそれを移行するなら、私はそれをaswerとして受け入れることができます。 – menjaraz

+0

あなたはZarkoにライセンスの使用法によって直接質問することができますが、このコードには制限がありません。 – RRUZ

答えて

1

私の好みはDelphi Praxisフォーラムで見つけthisTStopUhr)の実装に行きます。

抜粋:

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

私は経過時間を計算するのに少し異なるアルゴリズムを使います: 'function TimerElapsed(tick1、tick2:DWORD):DWORD; begin tick2> = tick1 then {timer roll-over check} 結果:=(tick2 - tick1){通常} else 結果:=(MAXDWORD - tick1)+ tick2; {ロールオーバー計算} 終了; ' –

+0

MAXDWORD-tick1とtick1は同じことをすると思います。どちらも1の補数(論理NOT)です。 –

関連する問題