1

スレッド化されたタイマー プール ユニットをクロス プラットフォームで使用できるように変換しています。現在の単位は、timeGetTime を使用して高精度を確保し、タイマー イベントが呼び出されたときに実際の経過間隔を報告します。

以前にOSXでgettimeofdayを使用して高解像度タイマーを取得しましたが、Delphi XE3で使用するための参照が見つかりません。

Delphiでこれを呼び出す方法、または高解像度タイマーを取得するための別のクロスプラットフォームの方法についてのヘルプを探しています。これにはミリ秒の精度が必要です(OSに依存していることはわかっています)。

前もってありがとう、マーティン

4

1 に答える 1

1

マルチプラットフォーム対応のより良いオプションは、 System.DiagnosticsユニットTStopWatchからのレコードを使用することです。

TStopWatch は、利用可能な場合は真の高解像度タイマーであり、その場合はナノ秒に近い精度 (OS とハードウェアによって異なります) を持ち、利用できない場合 (Windows の場合) は、標準のタイマー関数を使用してミリ秒の精度を提供します。

ミリ秒の精度のみが必要な場合は、次のように ElapsedMilliseconds プロパティを使用します。

var
  sw : TStopWatch;
  ElapsedMilliseconds : Int64;
begin
  sw := TStopWatch.Create() ;
  try
    sw.Start;
    Whatever();
    sw.Stop;

    ElapsedMilliseconds := sw.ElapsedMilliseconds;
  finally
    sw.Free;
  end;
end;

TStopWatch は、Windows ではQueryPreformanceFrequency / QueryPerformanceCounter関数、OS-X では mach_absolute_time に依存しています。

于 2013-02-27T04:32:53.643 に答える