2010-10-17 4 views
3

У меня точно такая же проблема размещена здесь год назад: 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 и Руби 1.8.7

+0

Не знаю, что здесь происходит, но код работает отлично, используя JRuby 1.5.3 в Windows 7. –

+0

Он также работает в Ruby 1.9 на Win7. Думаю, мне придется обновить свой рубин. –

+0

У вас есть спать 15, он должен просто спать 15 без пут ... – nictrix

ответ

0

Если я не ошибаюсь, сон осуществляется с использованием нативного системного вызова и, вероятно, мешает рубина зеленых нитей, которые находятся под управлением виртуальной машины. Это также объясняет, почему JRuby и 1.9 не страдают от одной и той же проблемы.

Смежные вопросы