2009-04-07 6 views
1

私は、タイムアウト期間として10msなどの低い値でWin32でSetTimerメソッドを試していました。私は500タイマーのイベントを取得するのにかかった時間を計算し、それが約5秒になると予想しました。驚いたことに、私は、約16msでタイムアウトしていることを意味するこれらの多くのイベントを取得するのに約7.5秒かかります。タイムアウト期間に設定できる値に制限はありますか(MSDNでは何も見つかりませんでした)?また、私のシステムで実行されている他のプロセスは、これらのタイマーメッセージに影響しますか?MFC/Win32のタイマーメッセージ

答えて

3

WindowsはリアルタイムOSではなく、この種の精度(10 ms間隔)を処理できません。そのことを言って、there are multiple kinds of timersといくつかは他のものよりも優れた精度を持っています。

5

OnTimerはWM_TIMERメッセージに基づいています。これは、低いメッセージ優先度です。つまり、待機中の他のメッセージがない場合にのみ送信されます。

またMSDNあなたは関係なく、スケジューラがタイムクォンタムを尊重することの10

あるUSER_TIMER_MINIMUM未満の間隔を設定することができないことを説明します。

1

システムタイマーの細かさを1msに変更することができます。これはMIDI処理を目的としています。

基本的には、w2kでの私の経験は、要求された待機時間が13ms未満であれば、0msと13msの2つの値の間でランダムに振動する待機を返すということです。それよりも長いタイマーは一般に非常に正確です。あなたの500のタイマーイベント - いくつかは0msで、13msは13msでした(13msがまだ正しいと仮定します)。あなたは時間不足に終わった。

+0

はい、0ミリ秒のイベントもありました。 – Naveen

0

前述のように - ウィンドウはリアルタイムOSではありません。特定の時間に何かをしてそれを期待することを頼むことは、愚かな用事です。タイマーを設定すると、可能な限り時間が経過した後すぐにWM_TIMERイベントを発生させるようウィンドウがきれいに呼び出されます。これは、他のスレッドが処理された後である可能性があります。したがって、WM_TIMERイベントを実際に見る時間は現実的には予測できません。あなたが知っているのは>あなたが設定した時間です。 Checkout this article on windows time

関連する問題