التابع pending_interrupt?
الخاص بالصنف Thread
في روبي
يتحقق مما إذا كان طابور الانتظار غير المتزامن فارغًا أم لا.
بما أنه يمكن استخدام ::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
انظر أيضا
- التابع
name=
: يعين التابعname=
اسم معين للمهمة فرعية لروبي. في بعض أنظمة التشغيل، قد يتم تعيين الاسم لـ pthread و/أو لـ kernel. - التابع
priority
: يُعيد التابعpriority
أولوية المهمة الفرعيةthr
. تورث القيمة الافتراضية من المهمة الفرعية الحالي التي تنشئ المهمة الفرعية الجديدة، أو صفر لمهمة فرعية الرئيسية الابتدائية؛ سيتم تشغيل المهمة الفرعية ذات الأولوية العالية بشكل متكرر أكثر من مثيلاتها ذات الأولوية المنخفضة (ولكنها ستعمل).