Embarcadero Delphi
時間間隔測定
サーチ…
Windows API GetTickCountを使用する
Windows APIのGetTickCount
関数は、システム(コンピュータ)が開始されてからのミリ秒数を返します。最も簡単な例は次のとおりです。
var
Start, Stop, ElapsedMilliseconds: cardinal;
begin
Start := GetTickCount;
// do something that requires measurement
Stop := GetTickCount;
ElapsedMillseconds := Stop - Start;
end;
GetTickCount
は32ビットのDWORD
返し、 GetTickCount
.7日ごとに折り返します。折り返しを避けるには、 GetTickCount64
(Windows Vista以降で使用可能)または特別なルーチンを使用してティックの差を計算します。
function TickDiff(StartTick, EndTick: DWORD): DWORD;
begin
if EndTick >= StartTick
then Result := EndTick - StartTick
else Result := High(NativeUInt) - StartTick + EndTick;
end;
function TicksSince(Tick: DWORD): DWORD;
begin
Result := TickDiff(Tick, GetTickCount);
end;
とにかく、これらのルーチンは、 GetTickCount
2回の後続呼び出しの間隔がGetTickCount
.7日の境界を超えると、不正確な結果を返します。
ミリ秒を秒に変換する例:
var
Start, Stop, ElapsedMilliseconds: cardinal;
begin
Start := GetTickCount;
sleep(4000); // sleep for 4 seconds
Stop := GetTickCount;
ElapsedMillseconds := Stop - Start;
ShowMessage('Total Seconds: '
+IntToStr(round(ElapsedMilliseconds/SysUtils.MSecsPerSec))); // 4 seconds
end;
TStopwatchレコードを使用する
Delphiの最近のバージョンには、時間間隔測定用のTStopwatchレコードが付属しています。使用例:
uses
System.Diagnostics;
var
StopWatch: TStopwatch;
ElapsedMillseconds: Int64;
begin
StopWatch := TStopwatch.StartNew;
// do something that requires measurement
ElapsedMillseconds := StopWatch.ElapsedMilliseconds;
end;
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow