• このエントリーをはてなブックマークに追加

RubyTkでなにかの監視処理を実施する方法を調べたことのメモです。

スポンサードリンク

RubyTk内でsleepが使えない

RubyTkでは、画面表示のために、Tk.mainloopを持ちいる。

これはメインスレッドで動作するため、 sleepをしてしまうとメインスレッドをその処理占有してしまい、 RubyTkをつかった描写ができない。また、逆もしかりである。

TkAfterをつかう

RubyTkでタイマ制御や定期監視のようなsleepに関わる処理に利用するライブラリがTkAfter.

使用例は以下のとおり。

タイマ制御がTkライブラリに依存してしまうのが個人的には気にくわなかった。

なので、別の方法を考える。

Threadをつかう

RubyのThread機能を利用して、別スレッドで定期的な処理を動かす。

定期的な通知には、observerライブラリを利用する。

どちらも実現したいことは同じだけれども、2つめのアーキの方が好きだ。