OSを予想以上に長く眠ります。私はそれを100回ループして、スリープ時間は100秒ではなく1500msでした。WinAPIのスリープ()関数呼び出しは
これは一般的な動作ですか、私のMOBO、CPU、Windowsのインストールで間違っていることを念頭に置いてください。
編集:可能であれば、このコードを実行してスリープ時間の長さを通知することができます。私は私の友人にこれを実行させ、彼は実際にそれをすべて1msで持っていました。
#include <iostream>
#include <ctime>
#include <Windows.h>
void test(void)
{
std::cout << "Testing 1ms sleep." << std::endl;
for (unsigned int i = 0; i < 10; i++)
{
std::clock_t startClocks = std::clock();
Sleep(1);
std::clock_t clocksTaken = std::clock() - startClocks;
std::cout << "Time: " << clocksTaken << "ms." << std::endl;
}
}
int main(void)
{
test();
std::cin.sync();
std::cin.get();
return 0;
}
EDIT2:一部の人が1ミリ秒を取得している理由はいくつかの他のプログラムは、1ミリ秒にシステム全体のタイマーの分解能を設定している実行していることであるようです。デフォルトでは、Windows 7では15.6msになるはずです。
で見つけることができる(ハードウェア/それが実行されている、その時のプロセッサの負荷など)私はあなたがそのコードを実行するように人々に求めて達成することを望んでいるか分からない。ループが繰り返されるたびに、ループが実行されるたびに異なる時間を出力することは、完全に可能です。 – obmarg
私はSleep()がWindows上でハードウェア固有であるとは思わない。 timeBeginPeriod()を使用するプログラムを実行していない場合、結果は15-16msでなければなりません。例:Windows Media Playerは10msに設定し、BSPlayerは1msに設定します。また、一部のブラウザで調整されているとも言われています。 – NFRCR
おそらく直接接続されていないかもしれませんが、依然として間接的なリンクが存在する可能性があります。大量の電力不足のマシンでウィンドウを実行していると、負荷が上がり、スリープ復帰までの時間も長くなります。 – obmarg