當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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?。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。