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

instance method IO#wait

wait(events, timeout) -> Integer | nil[permalink][rdoc][edit]
wait(*mode, timeout = nil) -> self | true | nil
(Integer events, ?Time::_Timeout timeout) → (Integer | false | nil)
(?Time::_Timeout? timeout, *wait_mode mode) → (self | true | false)

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

第 1 の形式では、待つイベントを IO::READABLEIO::WRITABLEIO::PRIORITY のビット OR で指定します。準備ができたイベントのビットマスクを Integer で返し、timeout 秒待っても準備できなかった場合は nil を返します。 IO::READABLE を含む場合、内部のバッファにデータがあればブロックせずに IO::READABLE を返します。

第 2 の形式では、待つイベントをシンボルで指定します。:read(:r:readable)・:write(:w:writable)・ :read_write(:rw:readable_writable)を 1 つ以上指定でき、省略した場合は :read です。 timeout とシンボルは任意の順序で指定できます。準備ができたら self を返し、内部のバッファにデータがあればブロックせずに true を返します。 timeout 秒待っても準備できなかった場合は nil を返します。

[PARAM] events:
待つイベントを IO::READABLEIO::WRITABLEIO::PRIORITY のビット OR で指定します。
[PARAM] mode:
待つイベントを :read:write:read_write などのシンボルで指定します。
[PARAM] timeout:
タイムアウトまでの秒数を指定します。nil を指定すると準備ができるまで待ち続けます。第 1 の形式では省略できません。
[EXCEPTION] ArgumentError:
events が正の整数でない場合や、mode に未対応のシンボルを指定した場合に発生します。
r, w = IO.pipe

p r.wait(IO::READABLE, 0)                 # => nil
p w.wait(IO::WRITABLE, 0) == IO::WRITABLE # => true
p r.wait(:read, 0)                        # => nil

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

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