GetTickCount関数について質問があります。コード内でこの関数を2回呼び出し、その間にいくつかのコマンドがあり、両方の呼び出しの関数が同じカウントを返します。すなわち
var1 = GetTickCount();
code
:
:
var2 = GetTickCount();
var1とvar2には同じ値が含まれています。
誰かが助けることができますか?
GetTickCount関数について質問があります。コード内でこの関数を2回呼び出し、その間にいくつかのコマンドがあり、両方の呼び出しの関数が同じカウントを返します。すなわち
var1 = GetTickCount();
code
:
:
var2 = GetTickCount();
var1とvar2には同じ値が含まれています。
誰かが助けることができますか?
これが WindowsのGetTickCount呼び出しであると仮定すると、それは完全に合理的です。
GetTickCount 関数の分解能は、システム タイマーの分解能に制限されており、通常は 10 ミリ秒から 16 ミリ秒の範囲です。
最初はミリ秒しか測定していないことに注意してください。最近では、ミリ秒で非常に多くのことができます。
ドキュメントは次のように続けています。
より高い解像度のタイマーが必要な場合は、マルチメディア タイマーまたは高解像度の タイマーを使用してください。
おそらくQueryPerformanceCounter
、より適切でしょうか?
Windows API 呼び出しについて言及している場合は、このをお読みください。この段落が関連しているので、短い間隔を計ろうとしていると思います。その間隔よりも短いものを計っていますか?その場合は、代わりに QueryPerformanceCounter を調べてください。
GetTickCount 関数の分解能は、システム タイマーの分解能に制限されており、通常は 10 ミリ秒から 16 ミリ秒の範囲です。GetTickCount 関数の解像度は、GetSystemTimeAdjustment 関数による調整の影響を受けません。
MSDNから
GetTickCount 関数の分解能は、システム タイマーの分解能に制限されており、通常は 10 ミリ秒から 16 ミリ秒の範囲です。GetTickCount 関数の解像度は、GetSystemTimeAdjustment 関数による調整の影響を受けません。
経過時間は DWORD 値として保存されます。したがって、システムを 49.7 日間連続して実行すると、時間はゼロに戻ります。この問題を回避するには、GetTickCount64 関数を使用します。それ以外の場合は、時間を比較するときにオーバーフロー条件を確認してください。
より高い解像度のタイマーが必要な場合は、マルチメディア タイマーまたは高解像度のタイマーを使用してください。
GetTickCount の分解能は 1 ミリ秒です (実際には、数ミリ秒です)。間に呼び出している関数の所要時間は 1 ミリ秒未満である可能性が非常に高くなります。