1ナノ秒まで測定することはできず、10ナノ秒まで測定することもできません。これは、それぞれがaction of measurement
ある種の呼び出しが必要です。最速のAPIの1つは、GetSystemTimeAsFileTime()です。通話には10〜15nsかかります。しかし、解像度/粒度はかなり劣っています(msレジームでは)。QueryPerformanceCounter()は、基盤となるハードウェアに応じて、MHz〜GHzの範囲の周波数を提供します。この呼び出しはそれほど高速ではありませんが、1MHzでは1マイクロ秒の分解能が得られます。QueryPerformanceFrequency()で指定されたこのような頻度では、呼び出しは増分レートよりも速いため、連続した呼び出しは等しい値を返す場合があります。もう1つのソースは、CPUタイムスタンプカウンター(rdtsc)です。ただし、これにもいくつかの欠点があります。最新のハードウェアは、付加的なCPU周波数を実装しています。したがって、この周波数は定数とは見なされません。このように、測定は一定のフェーズでのみ可能です。
実際、どの周波数源も一定の周波数を提供していません。これらの周波数はすべて、を持っているいくつかのハードウェアによって生成されますoffset and drift
。したがって、OSはQueryPerformanceFrequencyまたはCPU周波数の値を返し、それが定数であると信じ込ませます。ただし、取得できる数はわずかclose estimates
です。
実際の正確なタイミングは、これらの周波数がシステムRTCに対して較正されている場合にのみ実行できます。Windowsでの正確なタイミングの詳細については、この資料を参照してください。
編集: WindowsはTime Stamp Counter
CPUのを選択します。このような場合、QPF()の結果は、プロセッサ速度を固定数(この場合は1024)で割った値に等しくなります。Windowsは、一定/不変のTSCが使用可能な場合に、TSCを中心にタイムキーピングを優先的に構築することを選択します。3.33 GHz / 1024 =3.25MHz。