الفرق بين المراجعتين لصفحة: «Ruby/Thread/pending interrupt-3F»
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>pending_interrupt?</code> الخاص بالصنف <code>Thread</code> في روبي}}</noinclude> تصنيف: Ru...' |
جميل-بيلوني (نقاش | مساهمات) ط مراجعة وتدقيق. |
||
| (مراجعتان متوسطتان بواسطة مستخدم واحد آخر غير معروضتين) | |||
| سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE: التابع <code>pending_interrupt?</code> | <noinclude>{{DISPLAYTITLE: التابع <code>Thread.pending_interrupt?</code> في روبي}}</noinclude> | ||
[[تصنيف: Ruby]] | [[تصنيف: Ruby]] | ||
[[تصنيف: Ruby Method]] | [[تصنيف: Ruby Method]] | ||
[[تصنيف: Ruby Thread]] | [[تصنيف: Ruby Thread]] | ||
يتحقق مما إذا كان طابور الانتظار غير المتزامن فارغًا أم لا. | يتحقق التابع <code>pending_interrupt?</code> مما إذا كان طابور الانتظار غير المتزامن (asynchronous queue) فارغًا أم لا. | ||
بما أنه يمكن استخدام <code>[[Ruby/Thread/handle_interrupt| | بما أنه يمكن استخدام <code>[[Ruby/Thread/handle_interrupt|handle_interrupt]]</code> لتأجيل الأحداث غير المتزامنة، فمن الممكن استخدام هذا التابع للتحقق مما إذا كانت هناك أي أحداث مؤجلة. | ||
إن أعاد هذا التابع القيمة | إن أعاد هذا التابع القيمة <code>true</code>، فيمكنك إنهاء كتل <code>:never</code>. | ||
إذا مُرِّر نوع الخطأ إلى التابع، فسيتحقق فقط من الأحداث المؤجلة من النوع <code>error</code>. | |||
== الاستخدام == | |||
اطلع على المثال التالي:<syntaxhighlight lang="ruby">th = Thread.new{ | |||
الاستخدام | |||
<syntaxhighlight lang="ruby">th = Thread.new{ | |||
Thread.handle_interrupt(RuntimeError => :on_blocking){ | Thread.handle_interrupt(RuntimeError => :on_blocking){ | ||
while true | while true | ||
| سطر 33: | سطر 27: | ||
th.raise # stop thread</syntaxhighlight> | th.raise # stop thread</syntaxhighlight> | ||
يمكن كتابة هذا المثال أيضًا | يمكن كتابة هذا المثال أيضًا بالطريقة التالية، والتي عليك استخدامها إن أردت تجنب المقاطعات (interrupts) غير المتزامنة. | ||
<syntaxhighlight lang="ruby">flag = true | <syntaxhighlight lang="ruby">flag = true | ||
| سطر 50: | سطر 44: | ||
==البنية العامة== | ==البنية العامة== | ||
<syntaxhighlight lang="ruby">pending_interrupt?(error = nil) → true/false</syntaxhighlight> | <syntaxhighlight lang="ruby">pending_interrupt?(error = nil) → true/false</syntaxhighlight> | ||
== | ==القيمة المعادة== | ||
تعاد القيمة <code>true</code> إذا كان طابور الانتظار غير المتزامن (asynchronous queue) فارغًا. خلا ذلك، تعاد القيمة <code>false</code>. | |||
==أمثلة== | ==أمثلة== | ||
في المثال أدناه، يعالج التابع التالي تأجيل الأحداث غير المتزامنة على الفور: | |||
<syntaxhighlight lang="ruby">def Thread.kick_interrupt_immediately | <syntaxhighlight lang="ruby">def Thread.kick_interrupt_immediately | ||
Thread.handle_interrupt(Object => :immediate) { | Thread.handle_interrupt(Object => :immediate) { | ||
| سطر 60: | سطر 54: | ||
} | } | ||
end</syntaxhighlight> | end</syntaxhighlight> | ||
==انظر | ==انظر أيضًا== | ||
* التابع <code>[[Ruby/Thread/ | * التابع <code>[[Ruby/Thread/priority|priority]]</code>: يُعيد أولوية [[Ruby/Thread|المهمة الفرعية]] | ||
* | * تابع النسخة <code>[[Ruby/Thread/pending interrupt-3F-i|pending_interrupt?]]</code>: يتحقق مما إذا كان طابور الانتظار غير المتزامن (asynchronous queue) فارغًا أم لا [[Ruby/Thread|للمهمة الفرعية]] التي استُدعي معها. | ||
==مصادر== | ==مصادر== | ||
*[http://ruby-doc.org/core-2.5.1/Thread.html#method-i-pending_interrupt-3F قسم | *[http://ruby-doc.org/core-2.5.1/Thread.html#method-i-pending_interrupt-3F قسم التابع pending_interrupt? في الصنف Thread في توثيق روبي الرسمي.] | ||
المراجعة الحالية بتاريخ 12:47، 5 ديسمبر 2018
يتحقق التابع pending_interrupt? مما إذا كان طابور الانتظار غير المتزامن (asynchronous queue) فارغًا أم لا.
بما أنه يمكن استخدام handle_interrupt لتأجيل الأحداث غير المتزامنة، فمن الممكن استخدام هذا التابع للتحقق مما إذا كانت هناك أي أحداث مؤجلة.
إن أعاد هذا التابع القيمة true، فيمكنك إنهاء كتل :never.
إذا مُرِّر نوع الخطأ إلى التابع، فسيتحقق فقط من الأحداث المؤجلة من النوع 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
القيمة المعادة
تعاد القيمة true إذا كان طابور الانتظار غير المتزامن (asynchronous queue) فارغًا. خلا ذلك، تعاد القيمة false.
أمثلة
في المثال أدناه، يعالج التابع التالي تأجيل الأحداث غير المتزامنة على الفور:
def Thread.kick_interrupt_immediately
Thread.handle_interrupt(Object => :immediate) {
Thread.pass
}
end
انظر أيضًا
- التابع
priority: يُعيد أولوية المهمة الفرعية - تابع النسخة
pending_interrupt?: يتحقق مما إذا كان طابور الانتظار غير المتزامن (asynchronous queue) فارغًا أم لا للمهمة الفرعية التي استُدعي معها.