التابع pending_interrupt?‎‎ الخاص بالصنف Thread في روبي

من موسوعة حسوب
< Ruby‏ | Thread
مراجعة 22:29، 5 نوفمبر 2018 بواسطة محمد-بغات (نقاش | مساهمات) (أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>pending_interrupt?‎‎</code> الخاص بالصنف <code>Thread</code> في روبي}}</noinclude> تصنيف: Ru...')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

يتحقق مما إذا كان طابور الانتظار غير المتزامن فارغًا أم لا.

بما أنه يمكن استخدام ::handle_interrupt لتأجيل الأحداث غير المتزامنة، يمكن استخدام هذا التابع للتحقق مما إذا كانت هناك أي أحداث مؤجلة.

إن أعاد هذا التابع القيمة true، فيمكنك إنهاء كتلة :never.

على سبيل المثال، يعالج التابع التالي تأجيل الأحداث غير المتزامنة على الفور.


إذا تم إعطاء الوسيط 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‎

يمكن كتابة هذا المثال أيضًا كما يلي، والذي عليك استخدامه لتجنب التوقيفات (interrupts) غير المتزامنة.

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‎

البنية العامة

pending_interrupt?(error = nil)  true/false

المعاملات

error ‎

القيمة المُعادة

أمثلة

مثال على استخدام التابع pending_interrupt?‎:

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

انظر أيضا

مصادر