الفرق بين المراجعتين لصفحة: «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

انظر أيضا

مصادر