2

我有这个代码:

…………

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

    puts "TEST"

…………

它执行 ping 功能,但不会继续打印“TEST”语句。ping 函数里面有一个简单的“puts "PING"”语句。我希望 ping_thread 作为后台线程运行。

4

2 回答 2

4

Thread.new将自动启动您的线程在后台运行,Thread#join并将阻塞直到该线程完成其工作。所以通常,当主执行线程完成工作时,加入线程是你做的最后一件事。

尝试以下代码,看看它是否符合您的要求:

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

puts "TEST"

ping_thread.join

注意,如果最后没有jointhead,它会在主执行线程完成工作时死掉,所以join是必须的。

于 2012-11-08T14:05:56.997 回答
1

.join方法just wait here until thread is dead

于 2012-11-26T09:54:04.507 回答