Module: Itimer
- Defined in:
- lib/itimer.rb
Defined Under Namespace
Classes: Timeout
Class Method Summary collapse
Class Method Details
.timeout(seconds, klass = Timeout) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/itimer.rb', line 7 def self.timeout(seconds, klass=Timeout) Signal.trap 'ALRM' do raise klass end prev = get(:real) start = Time.now if prev > 0 seconds = [prev, seconds].min end begin set(:real, seconds) ret = yield ensure if prev > 0 set(:real, [prev - (Time.now-start), 0].max) else set(:real, 0) end end return ret end |