2013-10-21 67 views
3

我是新來的Ruby和試圖解決線程紅寶石 - 啓動一個線程

比方說,我有我想如下

def say_hello 
    puts 'hello world' 
end 

我跑每x秒的方法試圖運行它如下

Thread.new do 
    while true do 
     say_hello 
     sleep(5) 
    end 
end 

但是,當我運行該腳本,控制檯上不顯示任何內容。我錯過了什麼?謝謝!

+1

我想你的程序在線程啓動後突然退出。如果你在線程後面加入睡眠(100),你會發現輸出。 –

回答

5

主線程的線程在退出之前能跑。使用連接方法使當前線程等待線程完成執行(儘管它從不會)。

t = Thread.new do 
    while true do 
     say_hello 
     sleep(5) 
    end 
end 

t.join 
0

嘗試

t1 = Thread.new do 
    while true do 
     say_hello 
     sleep(5) 
    end 
end 

t1.join 
+0

我低估了這一點,因爲當我把它放在一個腳本中並運行它時,腳本立即完成。它沒有打印任何東西。 – Davidann

+0

對不起,我忘記了加入方法 –

+0

,如果你把它放在一個單獨的.rb文件中,並且沒有加入.join,它將不會運行,因爲主循環首先完成。但是,如果你把這個調用紅寶石控制檯IRB,它仍然會運行沒有。加入 –

5

你正在創建Thread對象,但你是不是在等待它完成其執行,嘗試:

Thread.new do 
    while true do 
     say_hello 
     sleep(5) 
    end 
end.join 
+4

也會按預期運行。這不完全正確。線程也會在沒有'join'的情況下執行,但是當主進程退出時它會退出。 –