2012-11-08 85 views
2

我有這樣的代碼:線程塊紅寶石主線程1.9

... ....

ping_thread = Thread.new { 
     loop do 
      sleep 2 
      ping 
     end 
    } 
    ping_thread.join 

    puts "TEST" 

... ....

它執行平函數,但不會在打印「TEST」語句時移動。 ping函數在它內部有一個簡單的「puts」PING「」語句。我想ping_thread作爲後臺線程運行。

回答

4

Thread.new將自動啓動您的線程在後臺運行,並且Thread#join將會阻塞,直到該線程完成其作業。所以通常情況下,當主執行線程完成其工作時,加入線程就是您所做的事情。

嘗試下面的代碼,看看它是否你想要做什麼:

ping_thread = Thread.new { 
    loop do 
     sleep 2 
     puts "ping" 
    end 
} 

puts "TEST" 

ping_thread.join 

請注意,如果你到底加入THEAD,將主要執行線程完成時死了工作,所以加入是必要的。

+0

我只需要線程在那個時候開始,作爲後臺進程,而不是用其他話,我想線程開始和結束 –

+0

那麼程序通常持續 –

+0

這這個例子做了什麼:-) –

1

.join意味着just wait here until thread is dead