2011-10-30 7 views
8

上記の操作をミリ秒単位で実行したいと思います。どのライブラリと関数呼び出しを好むべきですか?C++でのスリープ操作、プラットフォーム:windows

Ty。

+0

[スリープ](http://msdn.microsoft.com/en-us/library/ms686298%28VS.85%29.aspx)機能? – Praetorian

+0

あなたは睡眠が最良の解決策であることは確かですか?それは通常ではありません。 –

+0

数ミリ秒間スリープする必要がある場合は、sleep()が10ms以上の解像度を持つことに注意してください。 –

答えて

5

Win32 APIのSleep関数を使用できます。

+0

LOL。同じ最初のGoogleのリンクが、あなたはそれに私を打ち負かす45秒。 – ksming

2

windowsタスクスケジューラは、1ms(通常は20ms)をはるかに超える細かさを備えています。パフォーマンスカウンタを使って実際にSleep()機能で費やされた時間を測定することでこれをテストできます。 (QueryPerformanceFrequency()QueryPerformanceCounter()を使用すると、ナノ秒までの時間を測定できます)。 Sleep(0)はスレッドをできるだけ短時間スリープさせることに注意してください。

ただし、この動作を変更するには、timeBeginPeriod()を使用し、1msの期間を渡します。今すぐSleep(0)ははるかに速く戻るはずです。

この関数呼び出しは、マルチメディアストリームをより正確に再生するために作成されたことに注意してください。私はこれを使って何の問題もあったことはありませんが、そのような早い時期の必要性はまれです。あなたが達成しようとしているものによっては、この「ハック」に頼らずに、あなたが望む正確さを得るためのより良い方法があるかもしれません。

6

それとも、古いコンパイラでのVisual Studio 2010(または別のC++ 0xの意識コンパイラ)を使用

#include <thread> 
#include <chrono> 

std::this_thread::sleep(); 

// or 
std::this_thread::sleep_for(std::chrono::milliseconds(10)); 

を使用している場合は、同じ利便関連Boost Libraries

を使用することができます

ここでの大きな利点は、移植性であり、遅延paの変換が容易であることです。 「人間」ユニットへの武器。

+2

これは2010年には機能しません。VS 2012、はい、ただし2010年ではありません。 – OldPeculier

+2

@OldPeculierこれは、これが一般的に適用可能な回答であることを意味します。 – sehe

関連する問題