[#17017] 標準添付案 — Kazuhiro NISHIYAMA <zn@...>

西山和広です。

21 messages 2002/05/08
[#17019] Re: 標準添付案 — "Akinori MUSHA" <knu@...> 2002/05/08

At Wed, 8 May 2002 19:50:17 +0900,

[#17021] Re: 標準添付案 — GOTO Kentaro <gotoken@...> 2002/05/08

At Wed, 8 May 2002 22:45:06 +0900,

[#17031] double acosh — WATANABE Hirofumi <eban@...>

わたなべです。

25 messages 2002/05/10
[#17032] Re: double acosh — nobu.nakada@... 2002/05/10

なかだです。

[#17033] Re: double acosh — WATANABE Hirofumi <eban@...> 2002/05/10

わたなべです。

[#17036] Re: double acosh — matz@... (Yukihiro Matsumoto) 2002/05/10

まつもと ゆきひろです

[#17039] Re: double acosh — WATANABE Hirofumi <eban@...> 2002/05/10

わたなべです。

[#17134] argv[0] — Tanaka Akira <akr@...17n.org>

ふと ruby インタプリタの C における argv[0] を知りたくなったんですが、

23 messages 2002/05/18
[#17139] Re: argv[0] — matz@... (Yukihiro Matsumoto) 2002/05/18

まつもと ゆきひろです

[#17144] Re: msvcrt — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

18 messages 2002/05/19

[#17179] コマンドラインオプションの順序制約 — Kazuhiro NISHIYAMA <zn@...>

西山和広です。

13 messages 2002/05/22
[#17181] Re: コマンドラインオプションの順序制約 — matz@... (Yukihiro Matsumoto) 2002/05/22

まつもと ゆきひろです

[#17228] Re: [ruby-list:35305] Re: ((1.2)..(3.4)).to_a — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

28 messages 2002/05/30

[ruby-dev:17130] Re: Thread: deadlock trouble

From: Takaaki Tateishi <ttate@...>
Date: 2002-05-17 14:55:12 UTC
List: ruby-dev #17130
At Fri, 17 May 2002 14:47:53 +0900,
> 以下に示すようなケースなんですが,どうにか改修する手はないものでしょうか?

単純な方法ですが,以下に類似した方法で解決できるでしょうか?

トップレベルでスレッドのためのキューを作ります.コールバック
内でスレッドを実行したいときには,このキューにprocオブジェク
トを入れます.
トップレベルのスレッドにおいて,一定時間やあるトリガに反応し
てキューに溜ったprocオブジェクトを順にスレッドとして実行する
ようにします.

require 'tk'
require 'thread'

class TkThread
  QUEUE = []
  MUTEX = Mutex.new
  THREAD = Thread.new{
    while( true )
      sleep
      MUTEX.synchronize{
        QUEUE.each{|cb|
          Thread.new{
            cb.call()
          }
        }
        QUEUE.clear
      }
    end
  }

  def TkThread.new(v=nil)
    MUTEX.synchronize{
      QUEUE.push(Proc.new{ yield(v)})
    }
    THREAD.wakeup
  end
end

b1 = TkButton.new(nil, 'text'=>"b1:{p 'b1'}", 'command'=>proc{p 'b1'}).pack
b2 = TkButton.new(nil, 'text'=>"b2:{Thread{p 'b2'}}", 
                  'command'=>proc{Thread.new{p 'b2'}.value}).pack
TkButton.new(nil, 'text'=>'{b1.invoke}', 'command'=>proc{b1.invoke}).pack
TkButton.new(nil, 'text'=>'{b2.invoke}', 'command'=>proc{b2.invoke}).pack
TkButton.new(nil, 'text'=>'Thread{b1.invoke}', 
                  'command'=>proc{TkThread.new{b1.invoke}}).pack
TkButton.new(nil, 'text'=>'Thread{b2.invoke}', 
                  'command'=>proc{TkThread.new{b2.invoke}}).pack
Tk.mainloop


-- 
Takaaki Tateishi <ttate@kt.jaist.ac.jp>

In This Thread