2

我试图在 30 秒内每秒检查一次。我还没有找到一个明确的方法来用 Ruby 做到这一点。目前正在尝试这样的事情:

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

类似的问题是它必须使用睡眠,这会使线程在其轨道上停止整整一秒钟。有没有另一种方法可以在不使用睡眠的情况下实现与上述类似的事情?有没有办法在基于时间的间隔上进行循环?

4

3 回答 3

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
于 2013-04-09T04:29:43.990 回答
1

你可以做一些简单的事情,比如..

max_runtime = 10.seconds.from_now
puts 'whatever' until Time.now > max_runtime
于 2020-01-13T17:47:59.000 回答
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 或更大的任何值。有些事情通过毫秒处理,这将为您提供一个选项,可以节省您的处理周期。在图形处理中效果很好。

于 2014-12-01T14:31:32.010 回答