目次
前
次
時間処理
プロファイルで温度と時刻を知るためには、何らかの
時間経過を判定するかOS側から割込みでの通知が必要
です。
一定時間、タスク実行を中断するには、「after」を
使うのが、最も簡単だと判断しました。
指定時間の間だけタスク実行を中断し、他タスクに
制御を渡すのは、OS上で動作しているプログラムに
必須の機能。他のタスクに制御を渡せるのでマルチ
タスク実現が簡単になります。
「after」を利用したタスク実行の中断には
定番の記述方法があります。
Tcl/Tkの関数、手続きの定義には、procを利用して
記述するので、「after」を含んだ手続きは、以下
のようになります。
proc show_event {} {
#
global
# show
draw_hand
# action
if { $eflag == 1 } {
#
}
# delay
after 1000 show_event
}
手続きの定義の中で、自分自身を呼出す再帰とする
のと、最初に起動するコードが必要になります。
一度手続きを起動すると、プログラム終了まで
周期的な手続き実行になります。周期的な制御
をするか無視するのかは、フラグで指定します。
利用した手続きは、以下。
proc show_event {} {
#
global ecnt eflag elast
# show
draw_hand
# handling
if { $eflag == 1 } {
incr ecnt
# ? complete
if { $ecnt >= $elast } {
set eflag 0
}
}
after 1000 show_event
}
この手続きは、以下のことを仕様に反映させながら
定義していきました。
- 温度、時刻の表示は、別の手続き(draw_hand)に一任
- 周期操作をするか否かは、フラグ($eflag)の値で制御
- 1秒経過は、カウンタ($ecnt)に反映
- 指定時間経過後の周期操作無効化に、カウンタの最大値($elast)を利用
- 周期操作の無効化に、フラグ($eflag)を利用
フラグ($eflag)を利用して、周期操作の無効化を
可能にしたので、「Cancel」ボタンのメソッドは
フラグ操作に集約できました。
1秒経過をカウンタ値に反映させたことで、ステートごとの
温度と時刻の変化をカウンタ値から算定できます。
目次
前
次