我试图在 30 秒内每秒检查一次。我还没有找到一个明确的方法来用 Ruby 做到这一点。目前正在尝试这样的事情:
until counter == 30
sleep 1
if condition
do something
break
else
counter +=1
end
类似的问题是它必须使用睡眠,这会使线程在其轨道上停止整整一秒钟。有没有另一种方法可以在不使用睡眠的情况下实现与上述类似的事情?有没有办法在基于时间的间隔上进行循环?
您可以使用以下内容来近似您正在寻找的内容:
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
你可以做一些简单的事情,比如..
max_runtime = 10.seconds.from_now
puts 'whatever' until Time.now > max_runtime
你可以试试这个它允许间隔控制
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 或更大的任何值。有些事情通过毫秒处理,这将为您提供一个选项,可以节省您的处理周期。在图形处理中效果很好。