2009-06-03 21 views
3

Sleep()以外の、cでウインドウで使用できるより良いスリープ関数を知っている人がいるのだろうかと疑問に思っていました。これは、ミリ秒の入力を受け取り、入力が最小時間経過したことを保証します。私は1ミリ秒で渡していますが、実際には15-16ミリ秒の遅延があります。特定のスリープ時間を正確に設定する方法はありますか?Windowsのcでスリープ機能。より精度の高い関数が存在するか?

+0

を持っていない限り、あなたは最低限の保証を望んでいると言いますが、あなたの例では実際に保証された正確な時間(または保証された最大値)がほしいと思うように聞こえます。 –

+0

sleep()関数は18msごとにのみ起動します –

+0

関連するhttp://stackoverflow.com/questions/85122/sleep-less-than-one-millisecondを参照してください – harpo

答えて

2

いいえ、実際はありません。プログラムをスリープ状態にすると、プロセッサを放棄し、オペレーティングシステムが次に何をするかを決定させます。オペレーティングシステムが制御されると、プログラムに別の処理時間を与えるタイミングを決定します。このため、最低限を指定することができますが、特定の時点でOSがプロセスに戻るという保証はありません。

1

Multimedia Timersを参照してください。

+0

私はマルチメディアタイマがまだmilisecondグラニュラリティを使用していると信じています – JaredPar

0

いいえ、ミリ秒は利用可能な粒度であるため、Windowsではより良いスリープ機能はありません。より少ない時間スリープ状態にしたい場合は、種類のスピンロックを実装する必要があります。

1

睡眠は、あなたのプロセスが正確Nミリ秒スリープすること、少なくとものnミリ秒のためではありません実行されないことが保証されます。タイマーを設定したいのですか?またはビジーウェイト(ループ内のQueryPerformanceCounterをポーリング)

私はこのアプローチ(ビジーウェイト)を回避しようと思いますが、しかし、あなたはサイクルを燃やしているために、あなたは低いクロック速度に置かれてから、CPUを停止している(つまり、燃焼電池寿命)

関連する問題