الفرق بين المراجعتين لصفحة: «Ruby/Thread/pending interrupt-3F»

من موسوعة حسوب
< Ruby‏ | Thread
لا ملخص تعديل
ط مراجعة وتدقيق.
 
(مراجعة متوسطة واحدة بواسطة مستخدم واحد آخر غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: التابع <code>pending_interrupt?‎‎</code> الخاص بالصنف <code>Thread</code> في روبي}}</noinclude>
<noinclude>{{DISPLAYTITLE: التابع <code>Thread.pending_interrupt?‎‎</code> في روبي}}</noinclude>
[[تصنيف: Ruby]]
[[تصنيف: Ruby]]
[[تصنيف: Ruby Method]]
[[تصنيف: Ruby Method]]
سطر 9: سطر 9:
إن أعاد هذا التابع القيمة <code>true</code>، فيمكنك إنهاء كتل ‎<code>:never</code>.
إن أعاد هذا التابع القيمة <code>true</code>، فيمكنك إنهاء كتل ‎<code>:never</code>.


إذا تم إعطاء الوسيط <code>error</code> (انظر فقرة البنية العامة)، فتحقق فقط من الأحداث المؤجلة من نوع <code>error</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
سطر 27: سطر 27:
th.raise # stop thread‎</syntaxhighlight>
th.raise # stop thread‎</syntaxhighlight>


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


<syntaxhighlight lang="ruby">flag = true
<syntaxhighlight lang="ruby">flag = true
سطر 44: سطر 44:
==البنية العامة==
==البنية العامة==
<syntaxhighlight lang="ruby">pending_interrupt?(error = nil) → true/false‎</syntaxhighlight>
<syntaxhighlight lang="ruby">pending_interrupt?(error = nil) → true/false‎</syntaxhighlight>
==القيمة المُعادة==
==القيمة المعادة==
يعيد لتابع <code>pending_interrupt?‎</code> قيمة منطقية.
تعاد القيمة <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) {
سطر 54: سطر 54:
   }
   }
end‎</syntaxhighlight>
end‎</syntaxhighlight>
==انظر أيضا==
==انظر أيضًا==
* التابع <code>[[Ruby/Thread/priority|priority]]</code>: يُعيد التابع <code>priority</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 قسم التابع pending_interrupt?‎ في الصنف Thread‎ في توثيق روبي الرسمي.]
*[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

انظر أيضًا

مصادر