我是新來的Ruby和試圖解決線程紅寶石 - 啓動一個線程
比方說,我有我想如下
def say_hello
puts 'hello world'
end
我跑每x秒的方法試圖運行它如下
Thread.new do
while true do
say_hello
sleep(5)
end
end
但是,當我運行該腳本,控制檯上不顯示任何內容。我錯過了什麼?謝謝!
我是新來的Ruby和試圖解決線程紅寶石 - 啓動一個線程
比方說,我有我想如下
def say_hello
puts 'hello world'
end
我跑每x秒的方法試圖運行它如下
Thread.new do
while true do
say_hello
sleep(5)
end
end
但是,當我運行該腳本,控制檯上不顯示任何內容。我錯過了什麼?謝謝!
主線程的線程在退出之前能跑。使用連接方法使當前線程等待線程完成執行(儘管它從不會)。
t = Thread.new do
while true do
say_hello
sleep(5)
end
end
t.join
嘗試
t1 = Thread.new do
while true do
say_hello
sleep(5)
end
end
t1.join
我低估了這一點,因爲當我把它放在一個腳本中並運行它時,腳本立即完成。它沒有打印任何東西。 – Davidann
對不起,我忘記了加入方法 –
,如果你把它放在一個單獨的.rb文件中,並且沒有加入.join,它將不會運行,因爲主循環首先完成。但是,如果你把這個調用紅寶石控制檯IRB,它仍然會運行沒有。加入 –
你正在創建Thread對象,但你是不是在等待它完成其執行,嘗試:
Thread.new do
while true do
say_hello
sleep(5)
end
end.join
也會按預期運行。這不完全正確。線程也會在沒有'join'的情況下執行,但是當主進程退出時它會退出。 –
我想你的程序在線程啓動後突然退出。如果你在線程後面加入睡眠(100),你會發現輸出。 –