投稿日 | : 2002/08/30(Fri) 16:56 |
投稿者 | : Say |
Eメール | : |
URL | : |
タイトル | : タイマと精度 |
プロパティ関連はごらんになりましたか?
1秒タイマの例ですね?
残念ながらIntervalを5分には設定できません。
でも、例ではカウントアップしてますね?
1秒で1回カウントアップしますから、300カウントで5分ですね。
ということは、カウンタが300になったら、やりたい操作をやって、
カウンタを0に戻してやれば、5分毎の処理ができます。
ただし、Timerはそれほど正確ではありませんし、累積のずれが
だんだん大きくなる可能性があります。
誤差1秒前後で処理したいなら、Timerのなかで時刻を取得、保持して、
「前回の処理から5分たったか?」をチェックしてください。
=======================================================
これから下はタイマの精度を要求されるときに限り読んでください。
=======================================================
1秒以下の精度が必要な場合、
また、Timerの精度自体はOSにより10msec〜55msec程度ですから、
その程度の精度なら、Interval値を10〜55にセットし、
Timerの中でtimeGetTimeまたはGetTicCount(どちらもAPI)をよんで
経過時間をしらべます。
その際、timeGetTimeの精度は1msecですが、GetTicCountの精度は
OSにより5〜12msec程度ですので、GetTicCountを用いた場合、
Timerの精度とあわせて最悪67msecほど誤差が生じる可能性があります。
さらにそれ以上の精度が必要な場合、マルチメディアタイマAPI
(SetTimeEvent)を用いるか、ループ内でtimeGetTimeを調べることに
なります。これなら、1msec程度の誤差が期待できます。
が、前者はコールバック関数が必要ですから、APIとしてはちょっとむずかしいですし、
後者はCPU負荷が大きくなります。
参考までに、タイマを使う方法として、ほかに
サブクラス化してWM_TIMERメッセージを拾う方法と、
SetTimer(API)を使う方法がありますが、
苦労の割に精度が出ませんので割愛しました。