الفرق بين المراجعتين ل"Ruby/Thread/pending interrupt-3F"

من موسوعة حسوب
< Ruby‏ | Thread
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>pending_interrupt?‎‎</code> الخاص بالصنف <code>Thread</code> في روبي}}</noinclude> تصنيف: Ru...')
 
سطر 3: سطر 3:
 
[[تصنيف: Ruby Method]]
 
[[تصنيف: Ruby Method]]
 
[[تصنيف: Ruby Thread]]
 
[[تصنيف: Ruby Thread]]
يتحقق مما إذا كان طابور الانتظار غير المتزامن فارغًا أم لا.
+
يتحقق التابع <code>pending_interrupt?‎</code> مما إذا كان طابور الانتظار غير المتزامن (asynchronous queue) فارغًا أم لا.
  
بما أنه يمكن استخدام <code>[[Ruby/Thread/handle_interrupt|::handle_interrupt]]</code> لتأجيل الأحداث غير المتزامنة، يمكن استخدام هذا التابع للتحقق مما إذا كانت هناك أي أحداث مؤجلة.
+
بما أنه يمكن استخدام <code>[[Ruby/Thread/handle_interrupt|handle_interrupt]]</code> لتأجيل الأحداث غير المتزامنة، فمن الممكن استخدام هذا التابع للتحقق مما إذا كانت هناك أي أحداث مؤجلة.
  
إن أعاد هذا التابع القيمة true، فيمكنك إنهاء كتلة <code>:never</code>.
+
إن أعاد هذا التابع القيمة <code>true</code>، فيمكنك إنهاء كتل ‎<code>:never</code>.
  
على سبيل المثال، يعالج التابع التالي تأجيل الأحداث غير المتزامنة على الفور.
+
إذا تم إعطاء الوسيط <code>error</code> (انظر فقرة البنية العامة)، فتحقق فقط من الأحداث المؤجلة من نوع <code>error</code>.
 
 
 
 
 
 
إذا تم إعطاء الوسيط <code>error</code> (انظر فقرة البنية العامة)، فقم بالتحقق فقط من الأحداث المؤجلة من نوع <code>error</code>.
 
 
 
الاستخدام
 
<code>[[Ruby//pending_interrupt-3F-label-Usage|¶]]</code> <code>[[Ruby//top|↑]]</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){
سطر 33: سطر 27:
 
th.raise # stop thread‎</syntaxhighlight>
 
th.raise # stop thread‎</syntaxhighlight>
  
يمكن كتابة هذا المثال أيضًا كما يلي، والذي عليك استخدامه لتجنب التوقيفات (interrupts) غير المتزامنة.
+
يمكن كتابة هذا المثال أيضًا بالطريقة التالية، والتي عليك استخدامها إن أردت تجنب التوقيفات (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>error ‎</code>===
 
 
==القيمة المُعادة==
 
==القيمة المُعادة==
 +
يعيد لتابع <code>pending_interrupt?‎</code>  قيمة منطقية.
 +
 
==أمثلة==
 
==أمثلة==
مثال على استخدام التابع <code>pending_interrupt?‎</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) {
سطر 61: سطر 55:
 
end‎</syntaxhighlight>
 
end‎</syntaxhighlight>
 
==انظر أيضا==
 
==انظر أيضا==
* التابع <code>[[Ruby/Thread/name-3D|name=]]</code>: يعين التابع <code>name=</code> اسم معين لل[[Ruby/Thread|مهمة فرعية]] لروبي. في بعض أنظمة التشغيل، قد يتم تعيين الاسم لـ pthread و/أو لـ kernel.
+
* التابع <code>[[Ruby/Thread/priority|priority]]</code>: يُعيد التابع <code>priority</code> أولوية [[Ruby/Thread|المهمة الفرعية]]
* التابع <code>[[Ruby/Thread/priority|priority]]</code>: يُعيد التابع <code>priority</code> أولوية [[Ruby/Thread|المهمة الفرعية]] <code>thr</code>. تورث القيمة الافتراضية من [[Ruby/Thread|المهمة الفرعية]] الحالي التي تنشئ [[Ruby/Thread|المهمة الفرعية]] الجديدة، أو صفر ل[[Ruby/Thread|مهمة فرعية]] الرئيسية الابتدائية؛ سيتم تشغيل [[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‎ في توثيق روبي الرسمي.]

مراجعة 22:35، 5 نوفمبر 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

انظر أيضا

مصادر