Ruby 在特定的时间间隔或满足条件时执行循环
我试着在30秒内每秒钟检查一次火。我还没有找到一个用Ruby做这件事的清晰方法。目前正在尝试类似的操作:Ruby 在特定的时间间隔或满足条件时执行循环,ruby,loops,time,ruby-1.9,ruby-2.0,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,这会使线程停止运行整整一秒钟。有没有其他方法可以在不使用睡眠的情况下实现类似上述目标?有没有一种方法可以让某个东西在一个基于时间的间隔内循环?您可以通过以
until counter == 30
sleep 1
if condition
do something
break
else
counter +=1
end
这样做的问题是它必须使用sleep,这会使线程停止运行整整一秒钟。有没有其他方法可以在不使用睡眠的情况下实现类似上述目标?有没有一种方法可以让某个东西在一个基于时间的间隔内循环?您可以通过以下方式大致了解您想要的东西:
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
now=Time.now
计数器=1
环道
如果Time.now30时中断
结束
您可以通过以下方式大致了解您要查找的内容:
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
now=Time.now
计数器=1
环道
如果Time.now30时中断
结束
您可以尝试此方法,因为它允许间隔控制
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
间隔=5#每5秒检查一次
间隔计时器=1#必须从1开始
现在=时间
while Time.now-now<计数器
如果interval_timer%interval==0#每5次尝试,活动将处理一次
如果条件
东西
结束
结束
进程计时器=进程计时器+1
结束
这将在保证的30秒内发生。间隔可设置为任何值1或更大。有些事情是通过毫秒处理的,这会给你一个选项,可以节省你的处理周期。在图形处理中效果很好。您可以尝试使用它,它允许间隔控制
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
间隔=5#每5秒检查一次
间隔计时器=1#必须从1开始
现在=时间
while Time.now-now<计数器
如果interval_timer%interval==0#每5次尝试,活动将处理一次
如果条件
东西
结束
结束
进程计时器=进程计时器+1
结束
这将在保证的30秒内发生。间隔可设置为任何值1或更大。有些事情是通过毫秒处理的,这会给你一个选项,可以节省你的处理周期。在图形处理方面效果很好。您可以做一些简单的事情,如
max_runtime = 10.seconds.from_now
puts 'whatever' until Time.now > max_runtime
你可以做一些简单的事情,比如
max_runtime = 10.seconds.from_now
puts 'whatever' until Time.now > max_runtime
去掉计数器变量,对1..30中的i使用
或1.最多(30)
或(1..30)。每个。在等待时,您希望对线程执行什么操作?你可能想检查一些东西,比如,如果你试图检查IO,如果它不在那里,就做一些其他的事情。从上面的代码中不清楚是否还有其他处理要做。睡觉本身并没有什么不好。抱歉,我的问题含糊不清。我正在运行一个基于事件的bot,它是事件驱动/多线程的。我想检查触发循环的事件是否在30秒内发生。我想在30秒内经常检查(1秒或操作系统间隔)。条件在另一个事件中更新/发生,我希望此循环检查并根据出现/未出现的条件执行反应。睡眠导致延迟/无法触发此循环所处的事件。事件本身有许多导致不同响应的条件,这就是我不想使用slleep路由的原因。去掉计数器变量,在1..30
或1中为I使用。最多(30)
或(1..30)。每个。您希望在等待时对线程做什么?你可能想检查一些东西,比如,如果你试图检查IO,如果它不在那里,就做一些其他的事情。从上面的代码中不清楚是否还有其他处理要做。睡觉本身并没有什么不好。抱歉,我的问题含糊不清。我正在运行一个基于事件的bot,它是事件驱动/多线程的。我想检查触发循环的事件是否在30秒内发生。我想在30秒内经常检查(1秒或操作系统间隔)。条件在另一个事件中更新/发生,我希望此循环检查并根据出现/未出现的条件执行反应。睡眠导致延迟/无法触发此循环所处的事件。事件本身有许多导致不同响应的条件,这就是我不想使用slleep路由的原因。我认为这实际上完成了我要做的事情,我不知道向时间添加整数值等于向时间添加秒数。谢谢这比睡觉更糟糕,因为它会固定你的CPU。我想这实际上完成了我要做的事情,我不知道在时间上加一个整数值等于在时间上加上秒数。谢谢这比睡觉更糟糕,因为它会固定你的CPU。