06 Mar 2014, 11:43

[RubyTk]定期実行処理についてのメモ(Thread, TkAfter)

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

RubyTk内でsleepが使えない

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

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

TkAfterをつかう

<div class="outline-text-3" id="text-1-1">
  <p>
    RubyTkでタイマ制御や定期監視のようなsleepに関わる処理に利用するライブラリがTkAfter.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://www.dumbo.ai.kyutech.ac.jp/nomura-ken/kajiyama/ruby_tk/after.html">http://www.dumbo.ai.kyutech.ac.jp/nomura-ken/kajiyama/ruby_tk/after.html</a>
    </li>
  </ul>

  <p>
    使用例は以下のとおり。
  </p>

  <p>
  </p>

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

  <p>
    なので、別の方法を考える。
  </p></p>
</div></p>

Threadをつかう

<div class="outline-text-3" id="text-1-2">
  <p>
    RubyのThread機能を利用して、別スレッドで定期的な処理を動かす。
  </p>

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

  <p>
  </p>

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