ping函数每x个秒秒

时间:2013-09-21 21:27:17

标签: ruby

我如何在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秒执行该函数

3 个答案:

答案 0 :(得分:2)

答案 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