2013-09-04 9 views
6

Mam ten fragment kodu:Dlaczego zamknięcie wątku rubinowego zabija cały mój program?

puts "Start" 
loop do 
    Thread.start do 
     puts "Hello from thread" 
     exit 
    end 
    text = gets 
    puts "#{text}" 
end 
puts "Done" 

co by się spodziewać widzi „Start”, a następnie „Hello z nici” i wtedy będę mógł wejść wejście, które będzie się echem z powrotem do mnie. Zamiast tego otrzymuję "Start" i "Hello from thread", a następnie program wychodzi.

Z dokumentacji na exit:

Kończy progu i harmonogramów innym wątku do uruchomienia. Jeśli ten wątek jest już oznaczony jako zabity, exit zwraca wątek. Jeśli jest to główny wątek lub ostatni wątek kończy proces.

Ale myślałem, że stworzyłem nowy wątek? Dlaczego wychodzi z mojego głównego procesu?

Odpowiedz

8

Zajrzyj do dokumentacji Thread#exit. kill to Kernel#exit, który kończy skrypt Ruby.

puts "Start" 
loop do 
    Thread.start do 
     puts "Hello from thread" 
     Thread.exit 
    end 
    text = gets 
    puts "#{text}" 
end 
puts "Done" 
Powiązane problemy