2012-08-28 21 views
1

我正在创建一个Ruby(MRI 1.9.3)循环,最多运行一段时间,一旦这个时间到了,它就会进入循环的下一次迭代。有没有办法编写一个运行一次迭代达最大设定时间的Ruby循环?

例如,这是我希望实现:

timer = Timer.new 
while foo 
    timer.after 5 do # The loop on foo only gets to run for 5 seconds 
    next 
    end 

    # Do some work here 
end 

到目前为止,我发现tarcieri的宝石叫定时器(https://github.com/tarcieri/timers)这就是我想要的代码,模仿上面,但是我的实现并没有给出我期望的行为,如果我的工作需要更长时间,循环会在5秒后进入下一个迭代。有任何想法吗?

回答

10
require 'timeout' 
timeout_in_seconds = 5 
while foo 
    begin 
    Timeout.timeout(timeout_in_seconds) do 
     # Do some work here 
    end 
    rescue Timeout::Error 
    next 
    end 
end 
1

因为我刷掉了我的Ruby技能已经有一段时间了,但我相信你可以用超时库来做到这一点。

require 'timeout' 

while foo 
    Timeout.timeout(5) do 
     work() 
    end 
end 
0

你也可以试试这个:

time = 60 
time_start = Time.now 
begin  
     time_running = Time.now - time_start 
     #You_code_goes_here 
end until (time_running.to_i >= time) 

会发生循环,直到time_running变种是不是 “60” 等于或大于。

相关问题