永井@知能.九工大です.
Ruby/Tk に TkRTTimer クラスを追加しました.
このクラスは,従来の TkTimer クラスよりも少しばかり
リアルタイム処理に耐えられるように細工を加えたものです.
CVS の 1.8, 1.9 の両方にほおり込んであります.
サンプルは ext/tk/sample/tkrttimer.rb にあります.
このサンプルは,TkRTTimer クラスと TkTimer クラスとを使って
10 ms のインターバルで時計表示を更新しているものですが,
TkTimer クラスを使った方はどんどん遅れが出るのに対し,
TkRTTimer クラスを使った方は *見掛け上は* 遅れが出ません.
# ただし,表示の速度が 10 ms のインターバルに追い付かない場合は
# 除きます.
実装は,繰り返しのコールバックが本来呼び出されるはずだった時間 Ts,
実際に呼び出された時間 Tc,コールバック処理が終了した時間 Te,
次に呼ばれるべき時間 Tn ( Ts + 本来のインターバル時間 ) を使い,
次回の呼び出しまでのインターバルを
Tn - Te + ( 過去 5 回分の Ts - Tc の平均値 )
とするようにしています (負の場合は 0 ms のインターバルとします).
ですので,似非リアルタイム処理に過ぎないのですが,
決まった時間間隔で実行したい場合には従来よりも有用かと思います.
良かったらお試しください.
--
永井 秀利 (九工大 知能情報)
nagai / ai.kyutech.ac.jp