【发布时间】:2013-04-09 03:22:39
【问题描述】:
我试图在 30 秒内每秒触发一次检查。我还没有找到一个明确的方法来用 Ruby 做到这一点。目前正在尝试这样的事情:
until counter == 30
sleep 1
if condition
do something
break
else
counter +=1
end
类似的问题是它必须使用睡眠,这会使线程在其轨道上停止整整一秒钟。有没有另一种方法可以在不使用睡眠的情况下实现与上述类似的事情?有没有办法让某些东西在基于时间的间隔上循环?
【问题讨论】:
-
去掉计数器变量并使用
for i in 1..30或1.upto(30)或(1..30).each。 -
您在等待时希望对线程做什么?如果您正在尝试检查 IO,则可能需要查看 IO#select 之类的内容,如果不存在则执行其他操作。从上面的代码中不清楚是否还有其他处理要做。只是睡觉本身并没有什么错。
-
抱歉问题含糊不清。我正在运行一个基于事件的机器人,它是事件驱动/多线程的。我想检查触发循环的事件的 30 秒窗口内是否发生条件。我想在那 30 秒内经常进行检查(1 秒或 os 间隔)。条件在另一个事件中更新/发生,我希望此循环根据该条件发生/未发生检查并执行反应。
-
SLeep 导致一些延迟/无法触发此循环所在的事件。事件本身有许多条件导致不同的响应,这就是我不想使用 slleep 路由的原因。跨度>
标签: ruby loops time ruby-1.9 ruby-2.0