[ruby-gnome2-doc-cvs] [Hiki] update - シグナルハンドラをさらに

アーカイブの一覧に戻る

ruby-****@lists***** ruby-****@lists*****
2003年 4月 6日 (日) 01:33:02 JST


-------------------------
REMOTE_ADDR = 61.26.70.211
REMOTE_HOST = 
-------------------------

-------------------------
= シグナルハンドラをさらに 

signal_connectについて別の視点から見てみよう.

  % irb
  irb(main):001:0> require 'gtk2'
  => true
  irb(main):002:0> b = Gtk::Button.new("hoge")
  => #<Gtk::Button:0x0a2b84c0 ptr=0x0a3431a8>
  irb(main):003:0> b.signal_connect("clicked") {puts 1}
  => 1
  irb(main):004:0> b.signal_connect("clicked") {puts 2}
  => 2

signal_connectメソッドからの返り値に気付いただろうか?
これはコールバックブロックを識別するためのタグである。
前述したようにシグナルやオブジェクトには必要なだけのコールバックブロックを登録することができ、それらは接続した順番に実行される。 

それでは実際にシグナルを発行してみよう.
signal_emitメソッドは,引数に指定したシグナルを発行するメソッドである.

コールバックブロックが登録された順番に実行されていることが分かる.

  irb(main):005:0> b.signal_emit "clicked"
  1
  2
  => nil

signal_handler_disconnectメソッドはコールバックブロックを取り除くメソッドである.
取り除くコールバックブロックを指定する際にsignal_connectが返すタグを使う.

  irb(main):006:0> b.signal_handler_disconnect 1
  => #<Gtk::Button:0x0a2b84c0 ptr=0x0a3431a8>
  irb(main):007:0> b.signal_emit "clicked"
  2
  => nil

また,signal_handler_blockメソッドとsignal_handler_unblockメソッドを用いて,一時的にコールバックブロックを無効にしたり有効にしたりできる.

  irb(main):008:0> b.signal_handler_block 2
  => #<Gtk::Button:0x0a2b84c0 ptr=0x0a3431a8>
  irb(main):009:0> b.signal_emit "clicked"
  => nil
  irb(main):010:0> b.signal_handler_unblock 2
  => #<Gtk::Button:0x0a2b84c0 ptr=0x0a3431a8>
  irb(main):011:0> b.signal_emit "clicked"
  2
  => nil




ruby-gnome2-cvs メーリングリストの案内
アーカイブの一覧に戻る