Way*_*rad 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
Run Code Online (Sandbox Code Playgroud)
当像这样使用时:
every_so_many_seconds(1) do
p Time.now
end
Run Code Online (Sandbox Code Playgroud)
结果如下:
# => 2012-09-20 16:43:35 -0700
# => 2012-09-20 16:43:36 -0700
# => 2012-09-20 16:43:37 -0700
Run Code Online (Sandbox Code Playgroud)
诀窍是睡不到一秒钟.这有助于防止你失去蜱虫.请注意,您不能保证永远不会丢失勾号.那是因为操作系统无法保证您的非特权程序在需要时获得处理器时间.
因此,请确保您的时钟代码不依赖于每秒调用的块.例如,这会很糟糕:
every_so_many_seconds(1) do
@time += 1
display_time(@time)
end
Run Code Online (Sandbox Code Playgroud)
这没关系:
every_so_many_seconds(1) do
display_time(Time.now)
end
Run Code Online (Sandbox Code Playgroud)
小智 9
Thread.new do
while true do
puts Time.now # or call tick function
sleep 1
end
end
Run Code Online (Sandbox Code Playgroud)