目次

時間処理

 プロファイルで温度と時刻を知るためには、何らかの
 時間経過を判定するか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
}

 この手続きは、以下のことを仕様に反映させながら
 定義していきました。

 フラグ($eflag)を利用して、周期操作の無効化を
 可能にしたので、「Cancel」ボタンのメソッドは
 フラグ操作に集約できました。

 1秒経過をカウンタ値に反映させたことで、ステートごとの
 温度と時刻の変化をカウンタ値から算定できます。


目次

inserted by FC2 system