当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby Thread.pending_interrupt?用法及代码示例


本文简要介绍ruby语言中 Thread.pending_interrupt? 的用法。

用法

pending_interrupt?(error = nil) → true/false

返回异步队列是否为空。

由于 Thread::handle_interrupt 可以用来延迟异步事件,所以这个方法可以用来判断是否有任何延迟事件。

如果您发现此方法返回 true,那么您可以完成 :never 块。

例如,以下方法立即处理延迟的异步事件。

def Thread.kick_interrupt_immediately
  Thread.handle_interrupt(Object => :immediate) {
    Thread.pass
  }
end

如果给出error,则仅检查error 类型的延迟事件。

用法

th = Thread.new{
  Thread.handle_interrupt(RuntimeError => :on_blocking){
    while true
      ...
      # reach safe point to invoke interrupt
      if Thread.pending_interrupt?
        Thread.handle_interrupt(Object => :immediate){}
      end
      ...
    end
  }
}
...
th.raise # stop thread

这个例子也可以写成下面这样,你应该使用它来避免异步中断。

flag = true
th = Thread.new{
  Thread.handle_interrupt(RuntimeError => :on_blocking){
    while true
      ...
      # reach safe point to invoke interrupt
      break if flag == false
      ...
    end
  }
}
...
flag = false # stop thread

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Thread.pending_interrupt?。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。