SetTimerの精度について

[戻る]
ちる 2002/12/05(木) 17:53:18
いつもお世話になっております。
CWnd::SetTimerの精度についてこのような話を聞きました。

@SetTimer(500)と設定すると500msでメッセージが入るが
Windowsの仕様上、正確に500msで処理が開始できるわけではない。
必ず500ms以上でメッセージが入ってくる。(以下は当然在り得ない)

//ここまでは納得できます。

Aかといって1回目メッセージの処理開始が510msだったとして10msずれているのだが
次のメッセージが1010ms以降で起こるというわけではない。
ズレは最後のメッセージで発生するもののみで後は常に補正されている。
要はメッセージが起こるタイミングはタイマーを生成した時刻(ウインドウズタイマ
ー)
から500ms後,1000ms後,1500ms後と約束されている。
前のメッセージが起こってから500ms後という訳ではない。
(この場合は510のメッセージ処理が開始されてから490ms後にイベントが起きる
予定、つまり全体から見て1秒時点。ただしそこでもまたずれる。)

これって常識なんでしょうか?
MSDN等でも調べてみたのですが該当する文が無かったので
もしご存知の方がいましたら教えてください。
よろしくお願い致します。

ちる 2002/12/05(木) 18:02:38
失礼しました。
開発環境は次の通りです。
WINDOWS-XP/VC++6.0-SP5/MFC使用です。

επιστημη 2002/12/05(木) 18:03:11
なぜやってみないのですか?

ちる 2002/12/06(金) 09:58:10
試そうとも思ったのですが
タイマーがいくつ狂ったかというものを測定する方法が
ストップウォッチぐらいしか思い浮かばず正確な測定が難しいと判断したことと
タイマーが一定して狂う処理をどのように入れれば良いのかが
容易に思い浮かばなかったことから質問させていただきました。

>επιστημηさん
どのように試すのが宜しいのでしょうか。
もし宜しければご助言いただければと思います。

επιστημη 2002/12/06(金) 10:05:57
イベント発生の瞬間に若干の狂いはあるが、
'それが積み重なることはない'かどうかを確認したいんですよね?

たとえば 100[ms]でSetTimerかけます。(と同時にGetTickcount)
タイムアウトが1000回起こったときにもういちどGetTickCountし、
前回との差を取ります。その結果がおおよそ100秒なら安心できるのでは。

古いスレッドには追加発言できません。