2009-10-13 21 views

答えて

3

clock

A C++の関数。アプリケーションが開始されてからCPUティックの数を返します。これを秒に変換するには、CLOCKS_PER_SECで割ります。

GetTickCount

Win32 API関数。システムが開始されてからミリ秒の秒数を返します。

QueryPerformanceCounter

Win32 API関数。パフォーマンスカウンタは、高解像度のカウンタであり、時間の経過と共に増加します。これを秒に変換するには、QueryPerformanceFrequencyで割ります。

7

いいえ、ミリ秒の精度はありません。 clockおよびGetTickCountは、ほとんどのシステムで4〜15ミリ秒の精度を持っています。 QueryPerformanceCounterは、マイクロ秒からナノ秒の範囲の精度を持ちます。

clockは、MicrosoftのCランタイムライブラリを使用している場合、GetTickCountのラッパーです。MSコンパイラを使用している場合はおそらくそうです。 GetTickCountはミリ秒単位で値を返しますが、1ミリ秒後には1ミリ秒単位では増加しません。システムクロック割り込みが発生すると、4〜15ミリ秒ごとにインクリメントされます。通常は約15ミリ秒ですが、アプリケーションによって変更できます。これはコンピュータ全体に影響を及ぼします。スレッドスケジューリングに影響を与えます。頻繁に発生する割り込みのオーバーヘッドによって実際に実行されるプログラムコードのCPU時間も短縮されるため、本当に必要な場合以外は実行しないでください。お使いのコンピュータが15msよりも頻繁にティッキングされている場合、他のアプリケーションによってティックの割り込み頻度が変更されています。

QueryPerformanceCounterは、システム上で使用可能な高解像度タイマーを使用します。これまではプロセッサの内部クロックサイクル数に基づいていたため、2-3GHz、つまり約0.5nsと計算されていました。残念ながら、いくつかのプロセッサは、低消費電力状態でカウンタが刻々と変化するレートを変更し、マルチCPUシステム(つまり複数のプロセッサソケットを使用)では、CPUがすべて同じ速度でない場合に問題が発生します。 Windowsは現在、他のより信頼性の高いソースを使用していますが、プロセッサと同じくらい高い解像度ではありません。 QueryPerformanceFrequencyは、1秒間に何回ティックが発生するかを示します。ミリ秒を取得するには、QPCサンプルの差に1000を掛けて、QueryPerformanceFrequencyの結果で除算します。

関連する問題