我如何在ruby中每x秒执行一次特定任务?我已经尝试过使用Time.now.to_i作为纪元,然后一旦Time.now_i点击它执行的第二个任务,但是我没有成功完成这个,有人能给我一个关于如何每x量执行一个函数的小例子秒?
尝试:
def interval(timeout,function,*data)
now = Time.now.to_i
tasktime = Time.now.to_i + timeout
taskfunction = function
taskdata = data
end
我在那里停止了代码,因为我不知道ruby中接下来要做什么/接下来做什么,所以它应该做什么,例如,如果某人可以生成可以执行此类示例的代码,
def say(word)
puts word
end
如果设置函数的间隔就会说,数据将是“字”,那么它将每隔x秒执行该函数
答案 0 :(得分:2)
您可以使用Kernel#sleep
方法。
这是帖子
答案 1 :(得分:1)
这种方法会每2秒钟无限地同步一次(意味着其他ruby代码必须等到执行完成(..endless .. :))。
def say(word)
while true do
t = Time.now.to_f
puts word
frac = t.modulo(2.to_f)
sleep(2 - frac)
end
end
答案 2 :(得分:1)
如果你只是sleep
按照其他答案的建议持续一段时间,那么错误会随着它继续运行而受到污染,并且不准确。实际上,每次迭代都需要比给定间隔更长的时间。
下面显示的答案每次迭代都会调整延迟。
module Kernel
def tick_every sec, &pr
Thread.new do loop do
pr.call
t = Time.now.to_f
frac = t.modulo(sec.to_f)
sleep(sec - frac)
end end
end
end
thread = tick_every(2) do
puts "foo"
end
...
some_other_tasks
...
thread.kill