如何在ruby中调用每秒的方法

时间:2012-09-20 01:17:37

标签: ruby rhodes stopwatch

我想在ruby中创建一个秒表程序,所以我用Google搜索并找到了SO Q

但在那里,作者用tick调用1000xxx.times函数。我想知道如何使用类似(every second).times的方法来实现它,或者对于每个增量的秒来调用tick函数。

2 个答案:

答案 0 :(得分:16)

此功能:

def every_so_many_seconds(seconds)
  last_tick = Time.now
  loop do
    sleep 0.1
    if Time.now - last_tick >= seconds
      last_tick += seconds
      yield
    end
  end
end

当像这样使用时:

every_so_many_seconds(1) do
  p Time.now
end

结果如下:

# => 2012-09-20 16:43:35 -0700
# => 2012-09-20 16:43:36 -0700
# => 2012-09-20 16:43:37 -0700

诀窍是睡不到一秒钟。这有助于防止你失去蜱虫。请注意,您不能保证永远不会丢失勾号。那是因为操作系统无法保证您的非特权程序在需要时获得处理器时间。

因此,请确保您的时钟代码不依赖于每秒调用的块。例如,这会很糟糕:

every_so_many_seconds(1) do
  @time += 1
  display_time(@time)
end

这没关系:

every_so_many_seconds(1) do
  display_time(Time.now)
end

答案 1 :(得分:9)

Thread.new do
  while true do
    puts Time.now # or call tick function
    sleep 1
  end
end