はじめに
アプリケーションを書くときにタイマーが必要になることはよくあります。この記事では、タイマーの基本について説明し、さらにはタイマーの効果的な使い方についていくつかの例を取り上げます。
長年、フォーラムで初級者をサポートしてきて気付いた問題は、まず、多くの人がタイマーコントロールをストップウォッチタイマーあるいはカウントダウンタイマーとしてとらえていることです。しかし、それは違います。タイマーは、Xミリ秒ごとに単純にイベントを発生させるコントロールです。
では、それはどのような仕組みになっているのでしょう。この記事の最後で、いくつかのタイマー利用例を含んだVB6のダウンロード可能なプロジェクトを紹介します。これらの例を見れば、タイマーの仕組みについて理解が深まるでしょう。
ところで、タイマーは実際に何を行っているのでしょうか。タイマーはコントロールであり、実行時には何も表示されません。カウントや計算も行いません。プログラミングをする際に、表示、カウント、あるいは計算をしなければならないタイミングで、Xミリ秒ごとにイベントを発生させるだけのものです。
タイマーにはプロパティがごく少数しかなく、そのうちの2つ、つまりInterval
およびEnabled
だけがプログラミングに関係します。
Enabled
は、単純にタイマーをオンやオフに切り替えます。
Interval
はイベントの発生間隔をミリ秒単位で表し、最大間隔は65535ミリ秒、つまり65秒です。また、注意しなければならないのは、タイマーコントロールは16ミリ秒ごとに動作するハードウェアタイマーにリンクしているので、毎回16ミリ秒目だけが正確であるということです。
最初の例では、タイマーを使用して時刻表示を継続的に更新する方法を見ていきます。
画面上の時刻の更新
目的
フォーム上のラベルに現在の日付と時刻を表示します。規則正しく更新され、誤差は最大1秒です。
方法
フォームにラベルを追加し、ラベル名をTime1とします。また、フォームにはタイマーも追加します。タイマーコントロールはどこに置いてもかまいません。私の場合は、視覚的に邪魔にならないように、下あるいは横の方に置くようにしています。
フォームのloadイベントでタイマーを起動して、アプリケーションが起動する瞬間から現在時刻を表示するようにします。タイマーを有効にして、タイマーの間隔は500ミリ秒に設定します。間隔を1000ミリ秒(1秒)に設定することもできますが、こうすると正確性の面で少々問題が起こります(もっとも、表示される時刻が1秒以上ずれることはありません)。状況によりときどきタイマーが正確に1秒後に動作しないことがあり、その場合は表示が1秒分スキップされてしまうのです。たいした問題ではありませんが、個人的には見づらいと感じます。
タイマーを正しく動作させるために必要となる主なコードをリスト1に示します。
[Form_Load] Timer1.Interval = 500 Timer1.Enabled = True [Timer1_Timer] Time1.Caption = "Date: " & Date & " - Time: " & Time
このアプリケーションを起動すると、フォーム上で時刻が継続的に更新されます。CPU使用量はごくわずかで、フォーム上の他の機能に影響を及ぼすこともありません。