VB.NETのスレッドタイマ(System.Threading.Timer)を使った割込み処理について
VB.NETのコンソールプログラムでのタイマ割込み処理を行う場合、 スレッドタイマ(System.Threading.Timer)を使った方法があります。
フォームを持ったプログラムの場合には、Windowsタイマ(System.Windows.Forms.Timer)を 使えば簡単に割込み処理ができます。フォームにWindowsタイマのコントロールを張り付けて 各種のプロパティを設定すればOKです。
ただ、コンソールプログラムではフォームが無い場合が普通です。 そのため、タイマコントロールとは違う、スレッドタイマを使います。 以下のソースを見てください。
Main関数の処理の最初で、タイマイベント用の関数を宣言しています。 この関数はタイマ割込みが発生した時に実行する関数で、
次の行で生成されるタイマスレッドから実行されるデリゲートです。 タイマの間隔は1000msecに設定しています。
タイマイベントの関数では、タイマ割込みが在った証拠のフラグをONしているだけで、 メイン側ではそのフラグのONを見て、対応する処理を行っています。 例としては、現在時刻を表示しているだけです。
無限ループの中で、Sleep関数で待ち時間を使っています。 このSleep関数の行が無い状態でこのプログラムを実行すると、 CPU時間が非常に多く割かれてしまいます。 Sleepを入れることで、CPU時間はほぼ0%に近くなるはずです。
このソースは無限ループの処理になっていて、無限ループを抜ける処理については 考えていませんので、何か対策が必要です。
無限ループの方法はあまりスマートでは無いのですが、常駐させる様なプログラムでは有効ではないでしょうか。
コメント