2008年7月 5日

[ruby-list:45193] Re: ソース:インストール:MacOSX10.3.9

永井@知能.九工大です.

From: wei <weimayamiew@xxxxx>
Subject: [ruby-list:45192] Re: ソース:インストール:MacOSX10.3.9
Date: Sat, 5 Jul 2008 02:08:28 +0900
Message-ID: <064AC426-C05D-4454-9F23-56ACB1F9CCC7@xxxxx>
> 以下の環境で試しました。
>

> MacOSX 10.5.4 (intel mac)
> Tcl/Tk 8.5.3
> ruby 1.9.0-2

テストをありがとうございます.

> tcltklib.cのpatchをあててビルド

[ruby-list:45146] の tcltklib.c の patch は
効果がないということですので,これは必要ありませんでした.
余計なお手間を取らせてしまい,すみません.

> この状態で
> ext/tk/sample/demos-jp/widget
> を実行すると、天野さんの報告にあった、以下のエラーが出力され
> ました。
>
> % ruby widget
> Tk_MacOSXSetupTkNotifier: first [load] of TkAqua has to occur in the
> main thread!
> Abort
> %
>
> Tcl/Tkを手動でインストールする前は問題なく起動しております。
> つまり手動でインストールした事により、該当の現象が
> Intel Macでも起きました。

もしかして,手動インストールした Tcl/Tk は Aqua 版で,
以前から入っていたものは X Window System 版だったりしませんか?
そうであるなら,

> という事で、永井さんのメールにあった、
> module TkCore; RUN_EVENTLOOP_ON_MAIN_THREAD = true; end
> require 'tk'
> というようにrequireの前に持って来て実行した所、無事に起
> 動しました。
>
> という事で、
> ・Intel MacでもTcl/Tkによっては問題の現象が起きる
> ・問題の現象が起きてもmain threadで実行すれば解決する
> (少くてもIntel Macでは)
> となりそうです。

ということから,Aqua 版の known bug として,
「Aqua 版の Tcl/Tk ライブラリを Ruby1.9 で用いる場合には,
イベントループ (Tk.mainloop) はメインスレッドでしか実行できません」
ということにする必要がありそうです.

ただ,エラーメッセージ "first [load] of TkAqua" の "first" が
気になっているんですよね.
これがために [ruby-list:45146] の tcltklib.c の patch を
試してみていただいたのですが,ダメだったわけです.

今,思いついたテストとしては,
ダミーの Tcl/Tk インタープリタを生成してすぐに終了させることで,
無理やりに一度は TkAqua を main thread で読み込んでみる
というのがあります.
つまりは
---------------------------------------------------------
require 'tcltklib'
ip = TclTkIp.new
ip._eval('after 1 {destroy .}')
TclTkLib.mainloop
ip.delete
ip = nil # for GC
require 'tk'
---------------------------------------------------------
などとしてみるという話です.
まぁ,まず間違いなくダメだとは思いますが...(^_^;
--
永井 秀利 (nagai@xxxxx)
九州工業大学 大学院情報工学研究院 知能情報工学研究系


投稿者 xml-rpc : 2008年7月 5日 06:53
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/74994
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。