9

GetTickCount関数について質問があります。コード内でこの関数を2回呼び出し、その間にいくつかのコマンドがあり、両方の呼び出しの関数が同じカウントを返します。すなわち

var1 = GetTickCount();
code
:
:
var2 = GetTickCount();

var1とvar2には同じ値が含まれています。

誰かが助けることができますか?

4

5 に答える 5

18

これが WindowsのGetTickCount呼び出しであると仮定すると、それは完全に合理的です。

GetTickCount 関数の分解能は、システム タイマーの分解能に制限されており、通常は 10 ミリ秒から 16 ミリ秒の範囲です。

最初はミリ秒しか測定していないことに注意してください。最近では、ミリ秒で非常に多くのことができます。

ドキュメントは次のように続けています。

より高い解像度のタイマーが必要な場合は、マルチメディア タイマーまたは高解像度の タイマーを使用してください。

おそらくQueryPerformanceCounter、より適切でしょうか?

于 2010-08-10T20:14:01.730 に答える
7

Windows API 呼び出しについて言及している場合は、このをお読みください。この段落が関連しているので、短い間隔を計ろうとしていると思います。その間隔よりも短いものを計っていますか?その場合は、代わりに QueryPerformanceCounter を調べてください。

GetTickCount 関数の分解能は、システム タイマーの分解能に制限されており、通常は 10 ミリ秒から 16 ミリ秒の範囲です。GetTickCount 関数の解像度は、GetSystemTimeAdjustment 関数による調整の影響を受けません。

于 2010-08-10T20:14:28.907 に答える
5

QueryPerformanceCounterルートを使用する場合は、ハードウェアに依存する奇妙さに注意する必要があります。しばらく経ちましたので、このようなことがまだ起こっているのかどうかはわかりません。

QueryPerformanceCounter、GetTickCount、TimeGetTimeを比較する優れたサンプルアプリがあるため、このリンクも確認することをお勧めします。

于 2010-08-10T20:47:18.697 に答える
2

MSDNから

GetTickCount 関数の分解能は、システム タイマーの分解能に制限されており、通常は 10 ミリ秒から 16 ミリ秒の範囲です。GetTickCount 関数の解像度は、GetSystemTimeAdjustment 関数による調整の影響を受けません。

経過時間は DWORD 値として保存されます。したがって、システムを 49.7 日間連続して実行すると、時間はゼロに戻ります。この問題を回避するには、GetTickCount64 関数を使用します。それ以外の場合は、時間を比較するときにオーバーフロー条件を確認してください。

より高い解像度のタイマーが必要な場合は、マルチメディア タイマーまたは高解像度のタイマーを使用してください。

于 2010-08-10T20:14:32.830 に答える
1

GetTickCount の分解能は 1 ミリ秒です (実際には、数ミリ秒です)。間に呼び出している関数の所要時間は 1 ミリ秒未満である可能性が非常に高くなります。

于 2010-08-10T20:14:31.593 に答える