このマニュアルは既にメンテナンスが終了したバージョンの Ruby を対象としています。 最新版のマニュアルへ

Ruby 3.0 リファレンスマニュアル

instance method IO#wait

wait(events, timeout) -> self | true | nil[permalink][rdoc][edit] [added by io/wait]
wait(timeout = nil, mode = :read) -> self | true | nil [added by io/wait]

self が指定したイベント(読み込み可能・書き込み可能・優先データの受信)の準備ができるまでブロックし、準備ができたら self を返します。

待つイベントは、IO::READABLEIO::WRITABLEIO::PRIORITY のビット OR(第 1 の形式)か、 :read(:r:readable)・:write(:w:writable)・:read_write(:rw:readable_writable)のシンボル(第 2 の形式)で指定します。シンボルを省略した場合は :read です。 Ruby 3.0 では第 2 の形式のシンボルは timeout より後ろに書く必要があります。

読み込みを待つ場合、内部のバッファにデータがあればブロックせずに true を返します。内部のバッファとは Ruby の処理系が保持管理しているバッファのことです。つまり、読み込み可能である場合には true を返す場合と self を返す場合があることに注意してください。

timeout を指定した場合は、指定秒数経過するまでブロックし、タイムアウトした場合は nil を返します。

[PARAM] events:
待つイベントを IO::READABLEIO::WRITABLEIO::PRIORITY のビット OR で指定します。
[PARAM] timeout:
タイムアウトまでの秒数を指定します。nil を指定すると準備ができるまで待ち続けます。
[PARAM] mode:
待つイベントを :read:write:read_write などのシンボルで指定します。
require "io/wait"

r, w = IO.pipe

p r.wait(0)                            # => nil
p w.wait(IO::WRITABLE, 0).equal?(w)    # => true
w.write("x")
p r.wait(0).equal?(r)                  # => true

[SEE_ALSO] IO#wait_readable, IO#wait_writable, IO#wait_priority