以下のコードをチェックアウトします。
tick1 = GetTickCount();
Sleep (100);
tick2 = GetTickCount ();
ほとんどの場合、tick2-tick1 は 100 未満になります。私の予想では、常に 100+ になるはずです。私の予想は間違っていますか?
以下のコードをチェックアウトします。
tick1 = GetTickCount();
Sleep (100);
tick2 = GetTickCount ();
ほとんどの場合、tick2-tick1 は 100 未満になります。私の予想では、常に 100+ になるはずです。私の予想は間違っていますか?
あなたの(そして私の)期待は間違っているようです。
私はより良いタイミングを使用しました:
chrono::time_point<std::chrono::high_resolution_clock> tick1, tick2;
std::chrono::milliseconds timespan(100); // or whatever
for (int i = 0; i < 100; ++i)
{
tick1 = chrono::high_resolution_clock::now();
Sleep(100);
tick2 = chrono::high_resolution_clock::now();
std::chrono::duration<double> elapsed_seconds = tick2 - tick1;
cout << elapsed_seconds.count() << endl;
}
間隔の大部分は 0.099XXX で、2 つまたは 3 つ (100 のうち) 0.1000XXX
Precise thread sleepで推奨されている std::this_thread::sleep_for(...) が 必要です。最大 1 ミリ秒のエラーでも同様の結果が得られます。しかし、エラーは 1ms 未満です。より高い精度が必要ですか?