[#36644] Gtk.main — TOYOFUKU Chikanobu <toyofuku@...>
豊福です。
18 messages
2002/12/03
[#36645] Re: Gtk.main
— nobu.nakada@...
2002/12/03
なかだです。
[#36646] Re: Gtk.main
— TOYOFUKU Chikanobu <toyofuku@...>
2002/12/03
豊福です。
[#36649] Re: Gtk.main
— nobu.nakada@...
2002/12/03
なかだです。
[#36676] WIN32OLE と IAgentCtlRequest — Shusaku <tsyk@...>
Shusakuです。
7 messages
2002/12/05
[#36683] SyntaxError caused by redefinition of Class#== within irb. — Shusaku <tsyk@...>
Shusakuです。
5 messages
2002/12/05
[#36686] 1.1 < 61.1 - 60.0 — Shin-ichiro HARA <sinara@...>
原です。
19 messages
2002/12/06
[#36687] Re: 1.1 < 61.1 - 60.0
— Tietew <tietew-ml-ruby-list@...>
2002/12/06
[#36717] ruby 1.6.8 preview3 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
12 messages
2002/12/09
[#36718] Re: ruby 1.6.8 preview3
— m_seki@...
2002/12/09
[#36728] blade.stop — Shin-ichiro HARA <sinara@...>
原です。
9 messages
2002/12/10
[#36756] Re: blade.stop
— Shin-ichiro HARA <sinara@...>
2002/12/13
原です。
[#36734] Rubyソースコード完全解説 — Minero Aoki <aamine@...>
あおきです。ちょっと宣伝です。
10 messages
2002/12/11
[#36740] WIN32OLEでの定数読み込み — Takashi & Kayoko Sano <tksano@...3.kcn.ne.jp>
こんにちは。佐野と申します。
9 messages
2002/12/12
[#36742] DBM — OHARA Shigeki <os@...>
大原です。
6 messages
2002/12/12
[#36757] ruby 1.6.7+ruby-postgres-0.7.0でSegmentation fault — iga50@...
五十嵐と申します。
5 messages
2002/12/13
[#36768] Ruby/FreeType メンテナ募集 — Kazuhiro Yoshida <moriq.kazuhiro@...>
もりきゅうです。
4 messages
2002/12/15
[#36770] www.ruby-lang.orgリニューアル準備のお知らせ — TADA Tadashi <sho@...>
ruby-lang.orgのwebmasterチームでは、タイムリーな情報提供と使いやすい
11 messages
2002/12/16
[#36793] Thread と Net::HTTP — Makoto Satoh <makotosato2@...>
佐藤と申します。
9 messages
2002/12/17
[#36796] Ruby SNMPについて
— Tadashi Oh-Ya <toy@...>
2002/12/17
おおやと申します。
[#36797] Re: Ruby SNMPについて
— "Akinori MUSHA" <knu@...>
2002/12/17
At Tue, 17 Dec 2002 19:59:00 +0900,
[#36821] Cygwinで拡張モジュールが生成されない — 堀川 久 <vzw00011@...>
こんにちは。
10 messages
2002/12/23
[#36826] ANN: ruby 1.6.8 — matz@... (Yukihiro Matsumoto)
Hello everyone,
9 messages
2002/12/24
[#36830] [ATTN] Prepare name freeze of RAA — "NAKAMURA, Hiroshi" <nakahiro@...>
みなさんこんにちは。
11 messages
2002/12/25
[#36832] Re: [ATTN] Prepare name freeze of RAA
— "NAKAMURA, Hiroshi" <nakahiro@...>
2002/12/25
なひです。
[#36837] Re: [ATTN] Prepare name freeze of RAA
— "NAKAMURA, Hiroshi" <nakahiro@...>
2002/12/25
なひです。
[#36848] httpsnapshot.rb — Shin-ichiro HARA <sinara@...>
原です。
4 messages
2002/12/27
[#36856] raccのインストールについて — 齋藤雅浩 <m-saito@...4.so-net.ne.jp>
齋藤です。
6 messages
2002/12/27
[#36862] libsafeを入れるとrubyスクリプトが実行できない — Hideki Yamane <henrich@...>
8 messages
2002/12/28
[#36864] Re: libsafeを入れるとrubyスクリプトが実行できない
— Tanaka Akira <akr@...17n.org>
2002/12/28
In article <200212280626.gBS6QDL25734@mms-r00.iijmio.jp>,
[#36869] numbering of ruby-1.8.x* — TAKAHASHI Masayoshi <maki@...>
高橋征義です。
4 messages
2002/12/29
[ruby-list:36659] Re: Gtk.main
From:
Hiroshi IGARASHI <iga@...>
Date:
2002-12-03 15:28:29 UTC
List:
ruby-list #36659
いがらしです。
Ruby/GTK内部の話なのでruby-gnome-devel-jaに振ります。
At Tue, 3 Dec 2002 23:11:06 +0900,
Masao Mutoh <mutoh@highway.ne.jp> wrote:
>
> むとうです。
>
> > なかだです。
> > シグナルでもmain_quitでもキューに貯めておくだけみたいで、問題な
> > さそうです。その後でGtk.mainを呼んでいるスレッドを起こす必要が
> > ありますが。
> > むとうさんの[ruby-list:36652]のサンプルに、puts "finished"の後
> > でGtk.main_quitとThread.main.runを追加すると処理が終ったところ
> > で終了するようになりました。
>
> あぁ、Thread.main.runに思い至りませんでした。
>
> でも、ここで、runするThreadを明示的に指定しないといけないのって
> なぜなのでしょうか。mainスレッドってずっと実行状態なのかなと
> 思ってたのですが、そういうものではないのでしょうか。
> #また、激しく勘違いしてそうなのですが.....。
実際にtraceしてないので間違ってるかもしれませんが、
だいたいこんな感じのcall stackになってるはずです
(RubyとCごちゃまぜ)。
mainスレッド
Gtk.main
gtk_main()
...
rbgtk_poll()
rb_thread_select() /* 重い処理スレッドに制御を渡す */
重い処理スレッド
Gtk.main_quit
gtk_main_quit()
gtk_main_quit()を呼んでも、mainスレッドはrb_thread_select()
内部で止まったままです。Thread.main.runでmainスレッドを
起こしてやると、rb_thread_select()からgtk_main()まで帰ってきて
main loop終了検出、さらにGtk.mainも終了という流れになります。
よくある使い方だと思うので、Gtk.main, Gtk.main_quitに
面倒を見させるようにしてみました(CVS HEADからの差分)。
深く考えていないので、何か問題があるかも知れません。
# たぶんあります。
--
五十嵐 宏 (Hiroshi IGARASHI)
Index: src/rbgtkmain.c
===================================================================
RCS file: /cvsroot/ruby-gnome/ruby-gnome/gtk/src/rbgtkmain.c,v
retrieving revision 1.5
diff -u -p -r1.5 rbgtkmain.c
--- src/rbgtkmain.c 4 Feb 2002 00:20:48 -0000 1.5
+++ src/rbgtkmain.c 3 Dec 2002 15:08:35 -0000
@@ -13,6 +13,8 @@
#include "global.h"
+static VALUE rbgtk_main_threads = Qnil;
+
static VALUE
gtk_m_events_pending(self)
VALUE self;
@@ -24,6 +26,7 @@ static VALUE
gtk_m_main(self)
VALUE self;
{
+ rb_ary_push(rbgtk_main_threads, rb_thread_current());
gtk_main();
return Qnil;
}
@@ -40,6 +43,7 @@ gtk_m_main_quit(self)
VALUE self;
{
gtk_main_quit();
+ rb_thread_run(rb_ary_pop(rbgtk_main_threads));
return Qnil;
}
@@ -201,6 +205,8 @@ rbgtk_m_log_remove_handler(self, log_dom
void Init_gtk_main()
{
rb_define_module_function(mGtk, "events_pending", gtk_m_events_pending, 0);
+ rb_global_variable(&rbgtk_main_threads);
+ rbgtk_main_threads = rb_ary_new();
rb_define_module_function(mGtk, "main", gtk_m_main, 0);
rb_define_module_function(mGtk, "main_level", gtk_m_main_level, 0);
rb_define_module_function(mGtk, "main_quit", gtk_m_main_quit, 0);