2012-02-02 84 views
4

私はミリ秒(スリープ(ミリ))のためにそこにある知っているCPP WINDOWS:マイクロ秒単位でスリープ機能がありますか?

が、私はマイクロのための1つを見つけることができませんでした。..

+1

http://stackoverflow.com/questions/5801813/c-usleep-is-obsolete-workarounds-for-windows-mingw –

+0

ます。http:ここでそれを再度入力しないようにするには、こちらのリンクあり//stackoverflow.com/questions/85122/sleep-less-than-one-millisecond – JimR

答えて

1

あなたは、高解像度のカウンターを取得するためにrdtsc命令またはQueryPerformanceCounter Windows API関数を使用することができます。たとえば、GetTickCount、または時間関数などで調整できます。

0

スレッドを1ミリ秒未満でスリープ状態にする必要があるのはなぜですか?

OSスケジューラはそれをアレンジできません。スレッドを1ミリ秒間スリープしても、スケジューラはスリープ状態になる可能性があるため、スリープ状態になる可能性は1〜15ミリ秒です。これは環境に依存するかもしれませんが、Windowsでは1msより正確な精度を達成することはできません。

チェックWhat is the impact of Thread.Sleep(1) in C#?

+1

"* Windowsで得ることができる最高の精度は約2〜3ミリ秒です*"これはシステムクロックのティックレート。多くのマシンでは、 'Sleep 'の最大精度は15-16msです。 – ildjarn

+0

私が知っているのは、私がこのSleep(1)の質問へのリンクを私の答えに入れている理由です。しかし、この期間を最小に設定しても、2〜3ミリ秒以上の結果は得られません。 – LihO

0

Windowsがミリ秒未満のために眠ることができません。タイムスライスは1msよりもはるかに高い傾向があります。したがって、スレッドを最優先にしても実際には可能ではありません。

CPUの書き込みが気にしない場合は、QueryPerformanceCounterが経過するまでスピンできます。

1

VS 11 dev previewには、スレッドを扱う標準ライブラリの一部が含まれています。だから今あなたが言うことができます。もちろん

std::this_thread::sleep_for(std::chrono::microseconds(1)); 

を、このスレッドは、時間のまさにこの量の後に目を覚ますという意味ではありませんが、それはプラットフォームとしての近くでなければなりません(とライブラリの実装)が可能になります。他のコメントが指摘しているように、Windowsでは実際にスレッドがこれほど短い間スリープすることはありません。

関連する問題