我在一年前发布了完全相同的问题: Ruby Loop Failing in Thread
这里是代码(与上面的主题几乎相同)
class NewObject
def my_funk
t = Thread.new {
until false do
puts sleep 15 # sleeps way too much
end
}
t.join
end
end
if __FILE__ == $0
s = NewObject.new()
s.my_funk
end
这是输出:
15
42
36
38
33
45
42
33
32
40
代码基本上打印了睡觉的实际秒数。 有谁知道这里发生了什么以及如何解决它?
我正在运行Windows 7和Ruby 1.8.7
答案 0 :(得分:0)
如果我没弄错的话,睡眠是使用本机系统调用实现的,并且可能会干扰由VM管理的ruby green线程。这也可以解释为什么JRuby和1.9不会遭遇同样的问题......