2012-11-08 49 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