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 激活之前跳入来专门化。因此,我认为您可以添加一个 ObjectSpace 终结器方法,该方法在 Thread 被垃圾收集之前执行以执行您想要的操作。

Ruby:析构函数?

于 2013-05-10T00:57:32.930 回答