5

次のコードでスレッドを開始した場合、スレッド自体から終了呼び出しをトラップ/検出して、終了する前にクリーンアップを行うにはどうすればよいですか?

thr = Thread.new { sleep }
thr.status # => "sleep"
thr.exit
thr.status # => false

以下のようになるのではないかと思っていたのですが、よくわかりません。

thr = Thread.new {
    begin
        sleep
    rescue StandardError => ex
        puts ex.message
    rescue SystemExit, Interrupt
        puts 'quit'
    ensure
        puts 'quit'
    end
}
thr.status # => "sleep"
thr.exit #=> "quit"
thr.status # => false
4

1 に答える 1

1

これはテストされていませんが、スレッドのようなものはすべて、GC がアクティブになる前にジャンプするだけで特殊化できます。したがって、 Thread がガベージコレクションされる直前に実行される ObjectSpace ファイナライザーメソッドを追加して、必要なことを実行できると思います。

ルビー:デストラクタ?

于 2013-05-10T00:57:32.930 に答える