Embarcadero Delphi 使用Windows API GetTickCount

示例

Windows APIGetTickCount函数返回自系统(计算机)启动以来的毫秒数。最简单的示例如下:

var
  Start, Stop, ElapsedMilliseconds: cardinal;
begin
  Start := GetTickCount;
  // 做一些需要测量的事情
  Stop := GetTickCount;
  ElapsedMillseconds := Stop - Start;
end;

请注意,该GetTickCount函数返回32位,DWORD因此每49.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超过49.7天边界,这些例程将返回错误的结果。

要将毫秒转换为秒示例:

var
  Start, Stop, ElapsedMilliseconds: cardinal;
begin
  Start := GetTickCount;
  sleep(4000); // 睡4秒钟
  Stop := GetTickCount;
  ElapsedMillseconds := Stop - Start;
  ShowMessage('Total Seconds: '
      +IntToStr(round(ElapsedMilliseconds/SysUtils.MSecsPerSec))); // 4秒
end;