Phr*_*ogz 24
鉴于您提出的非常简单的直接问题,上面的"评论"是您的答案:
1.upto(5) do |n|
puts n
sleep 1 # second
end
Run Code Online (Sandbox Code Playgroud)
您可能希望定期运行方法,而不会阻止其余代码.在这种情况下,您希望使用一个Thread(并且可能创建一个互斥锁以确保两段代码不会同时尝试修改相同的数据结构):
require 'thread'
items = []
one_at_a_time = Mutex.new
# Show the values every 5 seconds
Thread.new do
loop do
one_at_a_time.synchronize do
puts "Items are now: #{items.inspect}"
sleep 5
end
end
end
1000.times do
one_at_a_time.synchronize do
new_items = fetch_items_from_web
a.concat( new_items )
end
end
Run Code Online (Sandbox Code Playgroud)
saw*_*awa 13
不知何故,许多人认为将sleep具有恒定时间间隔的方法作为其参数将起作用.但请注意,没有方法需要零时间.如果你放入sleep(1)一个循环,1只要你在循环中有一些其他内容,循环肯定会超过秒.更糟糕的是,处理循环的每次迭代并不总是花费相同的时间.每个周期将花费超过1秒,错误是随机的.随着循环继续运行,此错误将污染并始终向正增长.特别是如果你想要一个计时器,周期很重要,你不想这样做.
使用常量指定时间间隔循环的正确方法是这样做:
loop do
t = Time.now
#... content of the loop
sleep(t + 1 - Time.now)
end
Run Code Online (Sandbox Code Playgroud)