[#36686] 1.1 < 61.1 - 60.0 — Shin-ichiro HARA <sinara@...>

原です。

19 messages 2002/12/06

[#36770] www.ruby-lang.orgリニューアル準備のお知らせ — TADA Tadashi <sho@...>

ruby-lang.orgのwebmasterチームでは、タイムリーな情報提供と使いやすい

11 messages 2002/12/16

[ruby-list:36651] Re: Gtk.main

From: "SAWAI, Masahiko" <rururu@...>
Date: 2002-12-03 11:23:10 UTC
List: ruby-list #36651
澤井@一個人 です

<200212031021.gB3ALc215207@sharui.nakada.kanuma.tochigi.jp>の記事において
nobu.nakada@nifty.ne.jpさんは書きました。

>
>> やりたいことは重い処理をしている間ダイアログを出して待たせて
>> (「重い処理中断」ボタンもつける)、ウィンドウが expose され
>> たときのために再描画もさせたいということなのですがどのように
>> 書くのがよいでしょうか。
>
>うーん、main_loop外からmain_quitを呼んで大丈夫なものかどうか。

ちょっと試してみました…

  ############################################################
  require 'gtk'
  gtkThread = Thread.new { print "thru1\n"; Gtk.main }
  th = Thread.new { print "thru2\n"; sleep(2); system("ls"); }
  th.join;         puts "!! th is end"
  Gtk::main_quit;  puts "!! Gtk::main_quit is called"
  gtkThread.join;  puts "!! gtkThread is end"
  ############################################################

これを
 * Linux + X + gtk+1.2.10 + ruby-1.6.7
な環境で実行すると gtkThread が終了しませんでした.
 * Windows 2000 + gtk+1.3 + mingw32 版 ruby-1.6.7
で試したところ gtkThread も終了しました.

# なんとなく glib を --enable-threads でコンパイルしてあると
# まずいのかも…(根拠なし)


>Gtkのシグナルを使うとかのほうが安全なのかも知れません。

Gtk::idle_add や Gtk::timeout_add で設定したハンドラから
「重い処理」が終ったかどうかを調べて,終っていたら
Gtk::main_quit を呼ぶという方法もありますが…;
  ############################################################
  require 'gtk'
  
  idleProc = Proc::new(){
    puts "$isEnd #{$isEnd}"
    if $isEnd then
      Gtk::main_quit
      Thread.exit
    end
    sleep 0.1
  }
  
  $isEnd = false
  th = Thread.new { print "thru1\n"; Gtk::idle_add(&idleProc);Gtk.main }
  print "thru2\n"; sleep(2); system("ls")
  $isEnd = true
  th.join
  
  $isEnd = false
  th = Thread.new { print "thru3\n"; Gtk::idle_add(&idleProc);Gtk.main }
  print "thru4\n"; sleep(2); system("ls")
  $isEnd = true
  th.join
  ############################################################

# シグナルを使う方がスマートですねぇ.

/**
 * @auther  SAWAI, Masahiko 
 * @version 26 06/22/76
 * @see     mailto:rururu@mail.wbs.ne.jp
**/

In This Thread