执行一个特定时间间隔的循环或满足条件

时间:2013-04-09 03:22:40

标签: ruby loops time ruby-1.9 ruby-2.0

我试图每秒开一次检查,持续30秒。我还没有找到一个明确的方法来使用Ruby。目前尝试这样的事情:

until counter == 30
  sleep 1
  if condition
    do something
    break
   else
     counter +=1
end

类似的问题是它必须使用sleep,这会使线程在其轨道中停留一整秒。有没有其他方法可以在不使用睡眠的情况下实现与上述相似的东西?有没有办法在基于时间的间隔内进行某些循环?

3 个答案:

答案 0 :(得分:4)

您可以使用以下内容来估算您正在寻找的内容:

now = Time.now
counter = 1
loop do
  if Time.now < now + counter
    next
  else
    puts "counting another second ..."
  end
  counter += 1
  break if counter > 30
end

答案 1 :(得分:1)

您可以做一些简单的事情。.

max_runtime = 10.seconds.from_now
puts 'whatever' until Time.now > max_runtime

答案 2 :(得分:0)

你可以尝试这个,它允许间隔控制

counter == 30
interval = 5 # Check every 5 seconds
interval_timer = 1 # must start at 1
now = Time.now
while Time.now - now < counter
    if interval_timer % interval == 0 #Every 5 attempts the activity will process
        if condition
            stuff
        end
    end
    process_timer = process_timer + 1
end

这将在保证的30秒内发生,间隔可以设置为任何值1或更大。有些东西通过毫秒处理,这将为您提供一个选项,可以节省处理周期。适用于图形处理。