Ruby 2.2.0 リファレンスマニュアル > ライブラリ一覧 > thwaitライブラリ > ThreadsWaitクラス

class ThreadsWait

クラスの継承リスト: ThreadsWait < Object < Kernel < BasicObject
extend: Exception2MessageMapper
aliases: ThWait

要約

複数スレッドの終了を待つ機能を提供します。

目次

特異メソッド
all_waits new
インスタンスメソッド
all_waits empty? finished? join join_nowait next_wait threads

特異メソッド

all_waits(*threads) -> ()[permalink][rdoc]
all_waits(*threads) {|thread| ...} -> ()

指定されたスレッドすべてが終了するまで待ちます。 ブロックが与えられた場合、スレッド終了時にブロックを評価します。

[PARAM] threads:
終了するまでまつスレッドを一つもしくは複数指定します。
require 'thwait'

threads = []
5.times {|i|
  threads << Thread.new { sleep 1; p Thread.current }
}
ThreadsWait.all_waits(*threads) {|th| printf("end %s\n", th.inspect) }

# 出力例
#=> #<Thread:0x21584 run>
#=> #<Thread:0x21610 run>
#=> #<Thread:0x2169c run>
#=> #<Thread:0x21728 run>
#=> #<Thread:0x214f8 run>
#=> end #<Thread:0x21584 dead>
#=> end #<Thread:0x21610 dead>
#=> end #<Thread:0x2169c dead>
#=> end #<Thread:0x21728 dead>
#=> end #<Thread:0x214f8 dead>
new(*threads) -> ThreadsWait[permalink][rdoc]

指定されたスレッドの終了をまつための、スレッド同期オブジェクトをつくります。

[PARAM] threads:
終了を待つスレッドを一つもしくは複数指定します。

使用例

require 'thwait'

threads = []
5.times {|i|
  threads << Thread.new { sleep 1; p Thread.current }
}

thall = ThreadsWait.new(*threads)
thall.all_waits{|th|
  printf("end %s\n", th.inspect)
}

# 出力例
#=> #<Thread:0x214bc run>
#=> #<Thread:0x21548 run>
#=> #<Thread:0x215d4 run>
#=> #<Thread:0x21660 run>
#=> #<Thread:0x21430 run>
#=> end #<Thread:0x214bc dead>
#=> end #<Thread:0x21548 dead>
#=> end #<Thread:0x215d4 dead>
#=> end #<Thread:0x21660 dead>
#=> end #<Thread:0x21430 dead>

インスタンスメソッド

all_waits -> ()[permalink][rdoc]

指定されたスレッドすべてが終了するまで待ちます。 ブロックが与えられた場合、スレッド終了時にブロックを評価します。

使用例

require 'thwait'

threads = []
5.times {|i|
  threads << Thread.new { sleep 1; p Thread.current }
}

thall = ThreadsWait.new(*threads)
thall.all_waits{|th|
  printf("end %s\n", th.inspect)
}

# 出力例
#=> #<Thread:0x214bc run>
#=> #<Thread:0x21548 run>
#=> #<Thread:0x215d4 run>
#=> #<Thread:0x21660 run>
#=> #<Thread:0x21430 run>
#=> end #<Thread:0x214bc dead>
#=> end #<Thread:0x21548 dead>
#=> end #<Thread:0x215d4 dead>
#=> end #<Thread:0x21660 dead>
#=> end #<Thread:0x21430 dead>
empty? -> bool[permalink][rdoc]

同期されるスレッドが存在するならば true をかえします。

使用例

require 'thwait'

threads = []
3.times {|i|
  threads << Thread.new { sleep 1; p Thread.current }
}

thall = ThreadsWait.new
p thall.threads.empty? #=> true
thall.join(*threads)
p thall.threads.empty? #=> false
finished? -> bool[permalink][rdoc]

すでに終了したスレッドが存在すれば true を返します。

使用例

require 'thwait'

threads = []
3.times {|i|
  threads << Thread.new { sleep 1; p Thread.current }
}

thall = ThreadsWait.new(*threads)
p thall.finished? #=> false
sleep 3
p thall.finished? #=> true
join(*threads) -> ()[permalink][rdoc]

終了を待つスレッドの対象として、threads で指定されたスレッドを指定します。

[PARAM] threads:
複数スレッドの終了を待つスレッドに指定されたthreadsを加えます。
require 'thwait'

threads = []
5.times {|i|
  threads << Thread.new { sleep 1; p Thread.current }
}

thall = ThreadsWait.new
p thall.threads #=> []
thall.join(*threads)
p thall.threads
#=> [#<Thread:0x216ec dead>, #<Thread:0x21660 dead>, #<Thread:0x215d4 dead>, #<Thread:0x214bc dead>]
join_nowait(*threads) -> ()[permalink][rdoc]

終了を待つスレッドの対象として、threads で指定されたスレッドを指定します。 しかし、実際には終了をまちません。

[PARAM] threads:
複数スレッドの終了を待つスレッドに指定されたthreadsを加えます。
require 'thwait'

threads = []
5.times {|i|
  threads << Thread.new { sleep 1; p Thread.current }
}

thall = ThreadsWait.new
p thall.threads #=> []
thall.join_nowait(*threads)
p thall.threads #=> [#<Thread:0x21638 sleep>, #<Thread:0x215ac sleep>, #<Thread:0x21520 sleep>, #<Thread:0x21494 sleep>, #<Thread:0x21408 sleep>]
# 実際には終了を待っていない。sleep している。
next_wait(nonblock = nil) -> Thread[permalink][rdoc]

指定したスレッドのどれかが終了するまで待ちます。

[PARAM] nonblock:
true を与えると、キューが空の時、例外 ThreadsWait::ErrNoFinishedThread が発生します。
[EXCEPTION] ErrNoWaitingThread:
終了をまつスレッドが存在しない時、発生します。
[EXCEPTION] ErrNoFinishedThread:
nonblock がtrue でかつ、キューが空の時、発生します。
#使用例
require 'thwait'

threads = []
2.times {|i|
  threads << Thread.new { sleep i }
}

thall = ThreadsWait.new
thall.join_nowait(*threads)
until thall.empty?
  th = thall.next_wait
  p th
end

[SEE_ALSO] Queue#pop

threads -> Array[permalink][rdoc]

同期されるスレッドの一覧を配列で返します。

使用例

require 'thwait'

threads = []
3.times {|i|
  threads << Thread.new { sleep 1; p Thread.current }
}

thall = ThreadsWait.new(*threads)
p thall.threads
#=> [#<Thread:0x21750 sleep>, #<Thread:0x216c4 sleep>, #<Thread:0x21638 sleep>]