2013-09-04 11 views
6

Ho questo pezzo di codice:Perché l'interruzione di un thread Ruby uccide l'intero programma?

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

quello che mi aspetterei è vedere "Start" seguito da "Ciao da filo" e poi ho potuto entrare in ingresso che otterrebbe eco di nuovo me. Invece ricevo "Start" e "Hello da thread" e quindi il programma termina.

Dalla documentazione sulla exit:

Termina thr e gli orari altro thread da eseguire. Se questo thread è già contrassegnato per essere eliminato, exit restituisce il Thread. Se questo è il thread principale, o l'ultimo thread, esce dal processo.

Ma pensavo di aver generato un nuovo thread? Perché sta uscendo dal mio processo principale?

risposta

8

Stai guardando la documentazione Thread#exit. kill è Kernel#exit che termina lo script Ruby.

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