ruby - 如何在ruby中每秒调用一个方法

标签 ruby rhodes stopwatch

我想用 ruby​​ 创建一个秒表程序,所以我用谷歌搜索并找到了这个 SO Q .

但是在那边,作者用1000xxx.times调用了tick函数。我想知道如何使用 (every second).times 之类的方法或针对秒的每个增量调用 tick 函数。

最佳答案

这个函数:

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

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

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

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

这样就好了:

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

关于ruby - 如何在ruby中每秒调用一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12504940/

相关文章:

ruby - 有没有办法在 ruby​​ 中重新定义 []=+

javascript - rhomobile javascript 不工作

javascript - 计算电子邮件地址的输入速度

c# - C#中如何计算异步方法的执行时间

ruby-on-rails - Ruby on Rails —— 不是 grokking

ruby - 如何在 Ubuntu 14.04 LTS 上使用 Apache2 + Ruby on Rails 配置乘客

ruby-on-rails - 扩展 Rails 模型

Rhodes 4.0.0 Android 构建失败

Android 模拟器显示汉字

c# - WaitAll 构造中单个线程的性能测量