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

最後にスレッドに参加しないと、メインの実行スレッドが作業を完了したときに終了するため、その参加が必要であることに注意してください。

于 2012-11-08T14:05:56.997 に答える
1

.join意味just wait here until thread is dead

于 2012-11-26T09:54:04.507 に答える