الفرق بين المراجعتين لصفحة: «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) فارغًا أم لا للمهمة الفرعية التي استُدعي معها.