# timeout.rb

タイムアウトを行うライブラリ。

## 定数:

TimeoutError

## 関数:

`timeout(sec) {|i| .... }`
`timeout(sec, exception_class) {|i| .... } ((<ruby 1.7 feature>))`

  ブロックを sec 秒の期限付きで実行します。 ブロックの実行時間が制限を過ぎたときは例外 TimeoutError が発生します。 exception_class を指定した場合には TimeoutError の代わりに その例外が発生します。

  また sec が `nil` のときは制限時間なしで ブロックを実行します。

  注意

    timeout による割り込みは Thread によって実現されています。C 言語 レベルで実装され、Ruby のスレッドが割り込めない処理*1に対して timeout は無力です。その処理を Ruby で実装しなおすか C 側で Ruby のスレッドを意識してあげる必要があります。 timeoutの落し穴も参照

*1 そのような ものは実用レベルでは少ないのですが、例をあげると Socket などは DNSの名前解決に時間がかかった場合割り込めません。 resolv-replace.rb を使用する必要があります

links: [TimeoutError] [resolv-replace.rb] [trap::timeout]
reverse links: [1.6.8から1.8.0への変更点(まとめ)] [Timeout] [TimeoutError] [ruby 1.8 feature] [添付ライブラリ]