Tips タイマー部品の精度について
タイマー部品はその
間隔を1ミリ秒単位で設定することができますが、その
間隔を極端に短くすると時間がどんどん遅れてきます。
これはWindowsのTimerコンポーネント側の問題で、実際にどのくらいの
間隔にすればどれだけ遅れるのかは、処理の内容やWindowsOSのバージョンによって異なりますが、20ミリ秒以下に設定すると顕著になるようです。
ラーメンタイマーやホームページ更新のようにインターバルの長い場合、誤差は気にならない程度ですが、それでも数日繰り返し続けると明らかに誤差が出ます。
ゲームやマルチメディアのように速度が必要な処理では、
間隔が10ミリ秒といったこともあり得ますが、現状の
タイマー部品では難しいでしょう。
次のサンプルでは、
タイマーの
間隔を10ミリ秒に設定し、それを6000回繰り返すことで1分間を計測しようとしています。そして開始から終了までかかった秒数を計算すれば60秒(±1秒)となるはずです。ところが、筆者のPC(WindowsXP)では94秒(約1分半)もかかっています。
'***** サンプル *****
計算=0
タイマーAとは
タイマー。
タイマーAについて
値は10。 # 10ミリ秒
時満ちた時は
計算=計算+1
もし計算=6000ならば # 10ミリ秒*6000=1分
タイマーAを
停止。今を表示。 # 60秒後
今を表示。タイマーAを
開始。
'***** ここまで *****
'***** サンプル *****
計算=0
タイマーAとは
タイマー。
タイマーAについて
値は1000。 # 1秒
時満ちた時は
計算=計算+1
もし計算=60ならば # 1秒*60=1分
タイマーAを
停止。今を表示。 # 60秒後
今を表示。タイマーAを
開始。
'***** ここまで *****
Windowsでは、この問題を解決するために別途「timeGetTime」と「GetTickCount」というAPIが用意されています。「なでしこ」で正確な
タイマーが必要な場合は、これらAPIを利用するか、「システム時間」を取得するなどの工夫が必要でしょう。
いずれの方法でも、
タイマー部品よりも正確な時刻を取得できますが、それでも全く誤差がないわけではありませんので、試行錯誤を重ねて最適なプログラムを組む必要がありますね。
最終更新:2008年10月28日 14:50