Caleb Clausen wrote:
> On 5/27/09, Anonymous <derykus / gmail.com> wrote:
>> I'm totally new to Ruby so I'm sorry for the  piggyback question but,
>> in Perl you could
>> set an alarm clock that'd leave the program unfettered:
>>
>>
>>   { local $SIG{ALRM} = sub { die "timeout" };
>>     alarm( "target_time" - "Time.now" );
>>      # do other things
>>     alarm( 0 );
>>   };
>>   if ( $@ =~ /^timeout/ ) {# time's up... }
>>   elsif ( $@ )            {# other error... }
>>
>>
>> How would Ruby do this?
> 
> I went and looked again, and there is a Timeout module in ruby's
> stdlib, which I had forgotten about:
> http://www.ruby-doc.org/stdlib/libdoc/timeout/rdoc/index.html
> 
> So the equivalent of the perl code you posted should be:
> 
> #UNTESTED!!!
> require 'timeout'
> begin
>   Timeout.timeout(target_time-Time.now){
>     #do other things
>   }
> rescue Timeout::Error
>   #time's up
> rescue Exception
>   #other error
> end
> 
> Timeout uses Thread#raise, which I think is not reliable on JRuby or
> other implementations that use native threads.
> 
> PS: does anyone know why Timeout::Error < Interrupt ? Interrupt is for
> ^C... why would you want timeouts to be handled like ^C?
> 
may be of interest
http://rubyforge.org/projects/rubycron/