サーチ…


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