From: Hidetoshi NAGAI Date: 2003-10-17T01:20:16+09:00 Subject: [ruby-list:38593] Ruby/Tk の改善 永井@知能.九工大です. Ruby/Tk でスレッドが絡んだ際の segmentation fault の 原因となっていたものとして,「 Tcl/Tk の vwait や tkwait が 独自にイベントループを動かしてしまうために Ruby のスレッドとの 相性が非常に悪い」という問題があったのですが, これに対する Ruby/Tk の改修を完了しました. 結局のところ,vwait と tkwait とを tcltklib.c の上でインプリメント し直して,もともとの Tcl/Tk のものを置き換えています. もし良かったらテストしてみていただけると助かります. また多国語表示へのサポート強化として,Tcl で使われている 「 \uXXXX という表現での UNICODE 文字列指定 」を Ruby/Tk 上で使えるようにちょっとしたクラスを作成してみました. こちらについても良かったら試してみてください. いずれの修正も commit 済みですから, CVS から最新版を 取り寄せることで試すことができます. 以下に ChangeLog から抜き出したものを添えておきます. ---------------------------------------------- Wed Oct 15 00:20:15 2003 Hidetoshi NAGAI * ext/tcltklib/tcltklib.c: replace Tcl/Tk's vwait and tkwait to switch on threads smoothly and avoid seg-fault. * ext/tcltklib/tcltklib.c: add TclTkIp._thread_vwait and _thread_tkwait for waiting on a thread. (Because Tcl/Tk's vwait and tkwait command wait on an eventloop.) * ext/tk/lib/multi-tk.rb: support TclTkIp._thread_vwait and _thread_tkwait. * ext/tk/lib/tk.rb: now, TkVariable#wait has 2 arguments. If 1st argument is true, waits on a thread. If false, waits on an eventloop. If 2nd argument is true, checks existence of rootwidgets. If false, doesn't. Default is wait(true, false). * ext/tk/lib/tk.rb: add TkVariable#tkwait(arg) which is equal to TkVariable#wait(arg, true). wait_visibility and wait_destroy have an argument for waiting on a thread or an eventloop. * ext/tk/lib/tk.rb: improve of accessing Tcl/Tk's special variables. * ext/tk/lib/tkafter.rb: support 'wait on a thread' and 'wait on an eventloop'. ---------------------------------------------- Thu Oct 16 16:40:51 2003 Hidetoshi NAGAI * ext/tk/lib/tk.rb: Add Tk::EncodedString and Tk::UTF8_String class to support characters using the \uXXXX escape to the UNICODE string. * ext/tk/sample/{demos-en,demos-jp}/unicodeout.rb new demo-scripts (samples of Tk::UTF8_String) * ext/tk/sample/{demos-en,demos-jp}/widget add entries for 'unicodeout.rb' ---------------------------------------------- -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp