1require 'timeout' 2 3def progress(n = 5) 4 n.times {|i| print i; STDOUT.flush; sleep 1; i+= 1} 5 puts "never reach" 6end 7 8p timeout(5) { 9 45 10} 11p timeout(5, TimeoutError) { 12 45 13} 14p timeout(nil) { 15 54 16} 17p timeout(0) { 18 54 19} 20begin 21 timeout(5) {progress} 22rescue => e 23 puts e.message 24end 25begin 26 timeout(3) { 27 begin 28 timeout(5) {progress} 29 rescue => e 30 puts "never reach" 31 end 32 } 33rescue => e 34 puts e.message 35end 36class MyTimeout < StandardError 37end 38begin 39 timeout(2, MyTimeout) {progress} 40rescue MyTimeout => e 41 puts e.message 42end 43