From: Masao M. <mu...@hi...> - 2006-07-08 03:26:57
|
むとうです。 On Sat, 08 Jul 2006 01:13:50 +0900 Kazuhiro NISHIYAMA <zn...@mb...> wrote: > 西山和広です。 > > >>> Fri, 7 Jul 2006 01:19:33 +0900 の刻に > >>> mu...@hi...(Masao Mutoh) 氏曰く > > > > 最新のRuby-GNOME2ですと、他のスレッドでGtk::Dialog#runやGtk.mainを呼び出すと > > 以下のようなwarningが出ます。 > > 一応はresponseは-5や-6が返るようです。 > > > > test.rb: line 2 > > GLib-WARNING **:g_main_context_prepare(): main loop already active in another thread > > > > 現状では、複数のスレッドで上記メソッドを動作させることは推奨できません。 > > というより上記メソッドはメインスレッドで動作させるのが一番安全です。 > > なるほど。 > > 結局、Gtk::Dialog#runをメインスレッドで呼び出した後、 > 別の処理を別スレッドで実行するようにして、メインスレッドでは > begin > thread = yield > if thread > while thread.alive? > Thread.pass > while Gtk.events_pending? > Gtk.main_iteration > end > end > thread.join > end > rescue Exception > p $! > puts $!.backtrace > message = $!.message > if $!.is_a?(SystemCallError) > message = GLib.locale_to_utf8(message) > end > set_status(message) > end > という感じにしてみました。 yieldしてるってことはブロック付きのメソッド呼び出しになってるってことですよね。 使い方はこんな感じでしょうか? add_thread_proc { Thread.start{p "aa"} } -- .:% Masao Mutoh<mu...@hi...> |