システム タイマーである IRQ0 を使用できることはわかっていますが、これは 14.31818MHz クロックに基づいていますよね? これ以上の精度を提供するものはありますか?
ありがとう。
編集: QueryPerformanceCounter が使用する Windows 関数を知っている人はいますか?
「精度」と「精度」は別の意味です。「地球の円周は40000.000000000kmです」は正確ですが、正確ではありません。時計ではもう少し複雑です。
「システムタイマー」(ウィキペディアによるとPIT)は1.something MHzで実行されますが、通常は100〜1000HzのどこかでIRQ0を取得します。どうやら、ポート0x40から2回読み取って現在のカウンター値を取得することもできますが、これがどのようなレイテンシーであるかはわかりません(次に、次の割り込みまでのカウント数を取得するため、計算を行う必要があります) 。また、最新の「ティックレス」カーネルでは機能しません。
他にもいくつかの高周波タイマーがあります。
ダーウィン(つまりOS X)は、TSC周波数が変化しないと想定し、TSCが実行されていない(明らかにC4以上)スリープ状態から復帰するときに追加される基本値を調整するように見えます。TSCはCPU間で同期する必要がないため、CPUごとに異なる基本値があります。賢明なタイムスタンプを取得するには、かなりの労力を費やす必要があります。
IIRC、Linuxは単一のクロックソースを選択するだけです(TSC、それが正常であれば、HPET、次にACPI PMだと思います)。
IIRC、QueryPerformanceCounter()は、Windowsが最適と考えるものをすべて使用します。Windowsのバージョンにも多少依存します(XPはおそらく割り込みに対してHPETをサポートしていないため、タイムスタンプに対してもサポートしていないと思われます)。QueryPerformanceFrequency()を呼び出して推測することができます(1995030000を取得します。これは、おそらくTSCであることを意味します)。