Ruby Loop не работает в потоке - PullRequest
0 голосов
/ 28 августа 2009

У меня есть тема в Ruby. Это запускает цикл. Когда этот цикл достигает сна (n), он останавливается и никогда не просыпается. Если я запускаю цикл без sleep (n), он запускается как бесконечный цикл.

Что происходит в коде, чтобы остановить работу потока, как ожидалось? Как мне это исправить?

class NewObject
    def initialize
        @a_local_var = 'somaText'
    end

    def my_funk(a_word)
        t = Thread.new(a_word) do |args|
            until false do
                puts a_word
                puts @a_local_var
                sleep 5 #This invokes the Fail
            end
        end
    end
end

if __FILE__ == $0
    s = NewObject.new()
    s.my_funk('theWord')
    d = gets
end

Моя платформа - Windows XP SP3
Я установил версию ruby ​​1.8.6

1 Ответ

1 голос
/ 28 августа 2009

Вам не хватает объединения.

class NewObject
  def initialize
    @a_local_var = 'somaText'
  end

  def my_funk(a_word)
    t = Thread.new(a_word) do |args|
      until false do
        puts a_word
        puts @a_local_var
        sleep 5 
      end
    end
    t.join # allow this thread to finish before finishing main thread
  end
end

if __FILE__ == $0
  s = NewObject.new()
  s.my_funk('theWord')
  d = gets # now we never get here
end
...