الفرق بين المراجعتين لصفحة: «Ruby/Thread/pending interrupt-3F»
لا ملخص تعديل |
لا ملخص تعديل |
||
سطر 56: | سطر 56: | ||
==انظر أيضا== | ==انظر أيضا== | ||
* التابع <code>[[Ruby/Thread/priority|priority]]</code>: يُعيد التابع <code>priority</code> أولوية [[Ruby/Thread|المهمة الفرعية]] | * التابع <code>[[Ruby/Thread/priority|priority]]</code>: يُعيد التابع <code>priority</code> أولوية [[Ruby/Thread|المهمة الفرعية]] | ||
* تابع النسخة<code>[[Ruby/Thread/pending interrupt-3F-i|pending_interrupt?]]:</code>يتحقق التابع <code>pending_interrupt?</code> مما إذا كان طابور الانتظار غير المتزامن (asynchronous queue) فارغًا أم لا [[Ruby/Thread|للمهمة الفرعية]] التي استُدعي معها. | |||
==مصادر== | ==مصادر== | ||
*[http://ruby-doc.org/core-2.5.1/Thread.html#method-i-pending_interrupt-3F قسم التابع pending_interrupt? في الصنف Thread في توثيق روبي الرسمي.] | *[http://ruby-doc.org/core-2.5.1/Thread.html#method-i-pending_interrupt-3F قسم التابع pending_interrupt? في الصنف Thread في توثيق روبي الرسمي.] |
مراجعة 11:37، 6 نوفمبر 2018
يتحقق التابع pending_interrupt?
مما إذا كان طابور الانتظار غير المتزامن (asynchronous queue) فارغًا أم لا.
بما أنه يمكن استخدام 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
القيمة المُعادة
يعيد لتابع pending_interrupt?
قيمة منطقية.
أمثلة
في المثال أدناه، يعالج التابع التالي تأجيل الأحداث غير المتزامنة على الفور.
def Thread.kick_interrupt_immediately
Thread.handle_interrupt(Object => :immediate) {
Thread.pass
}
end
انظر أيضا
- التابع
priority
: يُعيد التابعpriority
أولوية المهمة الفرعية - تابع النسخة
pending_interrupt?:
يتحقق التابعpending_interrupt?
مما إذا كان طابور الانتظار غير المتزامن (asynchronous queue) فارغًا أم لا للمهمة الفرعية التي استُدعي معها.