[ruby-dev:24253] Re: tcltk-stubs 有効時 Tcl 側 exit で abort

From: Hidetoshi NAGAI <nagai@...>
Date: 2004-09-11 18:43:30 UTC
List: ruby-dev #24253
永井@知能.九工大です.

From: Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
Subject: [ruby-dev:24240] tcltk-stubs 有効時 Tcl 側 exit で abort
Date: Thu, 9 Sep 2004 14:40:13 +0900
Message-ID: <20040909.144011.74732438.nagai@ai.kyutech.ac.jp>
> 表題の状況で困っています.どなたかお助けいただけると助かります.
> Tcl/Tk インタープリタの exit プロシージャを呼び出すと異常終了します.

どうやら fix できたようなので commit しました.
ついでに SEGV を生じる原因になりそうな部分も
かなり fix できたのではないかと思います.
良かったらテストしてみていただけると助かります.

これと同時に multi-tk.rb や remote-tk.rb も,
以前よりも少しはましなものになってきていると思いますので,
こちらも良かったら試してみてください.

multi-tk.rb は「安全な」スレーブインタープリタを $SAFE==4 で
動かしたり,別のインタープリタを生成してテスト環境として
使ったりといったことができるはずです.
例えば $SAFE==0 の環境で

 safe_slave_ip = MultiTkIp.new_safe_slave(:safe=>3)
                              # slave を $SAFE == 3 に設定
 safe_slave_ip.eval_proc{ 
    TkButton.new(:text=>'slave $SAFE', :command=>proc{ p $SAFE }).pack
 }
 Tk.mainloop

とした際に,表示されたボタンをクリックすると 3 が出力されます.

remote-tk.rb は別プロセスの Tcl/Tk(wish) や Ruby/Tk を
Tk インタープリタの 'send' コマンドを駆使してコントロール
することができます.
'send' コマンドの条件としてコントロールする側 / される側の
一部のウィジェットがディスプレイを共有していればいいので,
両プロセスが異なるマシン上で動いていても OK です.
両プロセス共に Ruby/Tk である場合には,

 remote_ip.eval_proc{
    TkButton.new(:command=>proc{
                   puts 'Ruby on the controller-ip evals this procedure'
                 }, 
                 :text=>'print on controller-ip (Ruby-side)').pack(:fill=>:x)

    TkButton.new(:command=>'ruby {
                   puts "Ruby on the remote-ip evals this procedure"
                   p Array.new(3,"ruby")
                 }', 
                 :text=>'ruby cmd on the remote-ip').pack(:fill=>:x)}
 }

などとできます.
この例では,リモート側のウィンドウに 2 個のボタンウィジェットが
作成され,一つめのボタンではコントローラ側のコンソールに,二つ目の
ボタンではリモート側のコンソールにメッセージが出力されます.

multi-tk.rb も remote-tk.rb もソースアーカイブの ext/tk/sample に
サンプルスクリプトがありますので,気が向いたら動かしてみてください.

# 最新のソースで試してください.
-- 
                                         永井 秀利 (九工大 知能情報)
                                             nagai@ai.kyutech.ac.jp

In This Thread

Prev Next