الفرق بين المراجعتين ل"Ruby/Thread/join"

من موسوعة حسوب
< Ruby‏ | Thread
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>join‎</code> الخاص بالصنف <code>Thread</code> في روبي}}</noinclude> تصنيف: Ruby تصنيف...')
 
سطر 3: سطر 3:
 
[[تصنيف: Ruby Method]]
 
[[تصنيف: Ruby Method]]
 
[[تصنيف: Ruby Thread]]
 
[[تصنيف: Ruby Thread]]
عند استدعاء التابع <code>join</code>، فسيتوقف تنفيذ [[Ruby/Thread|المهمة الفرعية]] المُستدعية (calling thread)، وسيقوم بتنفيذ [[Ruby/Thread|المهمة الفرعية]] التي استُدعي معها <code>thr</code>.
+
عند استدعاء التابع <code>join</code>، فسيتوقف تنفيذ [[Ruby/Thread|المهمة الفرعية]] المُستدعية (calling thread)، وستٌنفذ [[Ruby/Thread|المهمة الفرعية]] التي استُدعي معها. ولن يعود حتى تخرج (exits) [[Ruby/Thread|المهمة الفرعية]]، أو حتى تمر <code>limit</code> ثانية (انظر فقرة البنية العامة).
  
ولن يعود حتى يخرج <code>thr</code>، أو حتى تمر <code>limit</code> ثانية (انظر فقرة البنية العامة).
+
في حالة انتهاء المهلة الزمنية، ستعاد <code>nil</code>، خلا ذلك، ستُعاد [[Ruby/Thread|المهمة الفرعية]].
  
في حالة انتهاء المهلة الزمنية، سيُعاد <code>nil</code>، خلا ذلك، سيُعاد <code>thr</code>.
+
سيتم إنهاء كل [[Ruby/Thread|المهام الفرعية]] غير المضمومة (joined) عندما يخرج البرنامج الرئيسي.
  
سيتم إنهاء كل [[Ruby/Thread|المهمة الفرعية]] غير المضمومة (joined) عندما يخرج البرنامج الرئيسي.
+
إن أطلقت [[Ruby/Thread|المهمة الفرعية]] سابقا استثناء، ولم يتم تعيين الرايتين <code>[[Ruby/Thread/abort_on_exception|abort_on_exception]]</code> أو ‎<code>$DEBUG</code> (أي أنه لم تتم معالجة الاستثناء بعد) ، فسيُعالج في هذا الوقت.
 
 
إن أطلق [[Ruby/Thread|المهمة الفرعية]] سابقا استثناء <code>thr</code>، ولم يتم تعيين الرايتين <code>[[Ruby/Thread/abort_on_exception|::abort_on_exception]]</code> أو ‎$DEBUG (أي أنه لم تتم معالجة الاستثناء بعد) ، فستتم معالجته في هذا الوقت.
 
 
 
 
 
 
 
يوضح المثال التالي الوسيط <code>limit</code>.
 
 
 
 
 
 
 
هذا سوف ينتج:
 
 
 
<syntaxhighlight lang="ruby">tick...
 
Waiting
 
tick...
 
Waiting
 
tick...
 
tick...‎</syntaxhighlight>
 
 
==البنية العامة==
 
==البنية العامة==
 
<syntaxhighlight lang="ruby">join → thr
 
<syntaxhighlight lang="ruby">join → thr
سطر 32: سطر 15:
 
==المعاملات==
 
==المعاملات==
 
===<code>limit‎</code>===
 
===<code>limit‎</code>===
 +
يمثل عدد ثواني المهملة الزمنية.
 +
 
==القيمة المُعادة==
 
==القيمة المُعادة==
 +
في حالة انتهاء المهلة الزمنية، ستعاد <code>nil</code>، خلا ذلك، ستُعاد [[Ruby/Thread|المهمة الفرعية]].
 +
 
==أمثلة==
 
==أمثلة==
 +
 +
=== المثال الأول ===
 
مثال على استخدام التابع <code>join‎</code>:
 
مثال على استخدام التابع <code>join‎</code>:
 
<syntaxhighlight lang="ruby">a = Thread.new { print "a"; sleep(10); print "b"; print "c" }
 
<syntaxhighlight lang="ruby">a = Thread.new { print "a"; sleep(10); print "b"; print "c" }
سطر 39: سطر 28:
 
x.join # Let thread x finish, thread a will be killed on exit.
 
x.join # Let thread x finish, thread a will be killed on exit.
 
#=> "axyz"‎</syntaxhighlight>
 
#=> "axyz"‎</syntaxhighlight>
 +
 +
=== المثال الثاني ===
 +
يوضح المثال التالي استخدام الوسيط <code>limit</code>.:<syntaxhighlight lang="ruby">y = Thread.new { 4.times { sleep 0.1; puts 'tick... ' }}
 +
puts "Waiting" until y.join(0.15)</syntaxhighlight>هذا سوف ينتج:<syntaxhighlight lang="ruby">tick...
 +
Waiting
 +
tick...
 +
Waiting
 +
tick...
 +
tick...‎</syntaxhighlight>
 
==انظر أيضا==
 
==انظر أيضا==
* التابع <code>[[Ruby/Thread/inspect|inspect]]</code>:
+
* التابع <nowiki/>[[Ruby/Thread/abort_on_exception|<code></code>]]<code>[[Ruby/Thread/key-3F|abort_on_exception]]</code>: يُعيد التابع <code>abort_on_exception</code> حالة الشرط "abort on exception". القيمة الافتراضية هي <code>false</code>.
* التابع <code>[[Ruby/Thread/key-3F|key?‎]]</code>: يُعيد التابع <code>key?‎</code> القيمة <code>true</code> إن كانت [[Ruby/String|السلسلة النصية]] أو الرمز المعطى (انظر فقرة البنية العامة) موجودة على هيئة متغير محلي [[Ruby/Fiber|الليف]].
 
 
==مصادر==
 
==مصادر==
 
*[http://ruby-doc.org/core-2.5.1/Thread.html#method-i-join قسم  التابع join‎ في الصنف Thread‎ في توثيق روبي الرسمي.]
 
*[http://ruby-doc.org/core-2.5.1/Thread.html#method-i-join قسم  التابع join‎ في الصنف Thread‎ في توثيق روبي الرسمي.]

مراجعة 11:10، 6 نوفمبر 2018

عند استدعاء التابع join، فسيتوقف تنفيذ المهمة الفرعية المُستدعية (calling thread)، وستٌنفذ المهمة الفرعية التي استُدعي معها. ولن يعود حتى تخرج (exits) المهمة الفرعية، أو حتى تمر limit ثانية (انظر فقرة البنية العامة).

في حالة انتهاء المهلة الزمنية، ستعاد nil، خلا ذلك، ستُعاد المهمة الفرعية.

سيتم إنهاء كل المهام الفرعية غير المضمومة (joined) عندما يخرج البرنامج الرئيسي.

إن أطلقت المهمة الفرعية سابقا استثناء، ولم يتم تعيين الرايتين abort_on_exception أو ‎$DEBUG (أي أنه لم تتم معالجة الاستثناء بعد) ، فسيُعالج في هذا الوقت.

البنية العامة

join  thr
join(limit) thr

المعاملات

limit‎

يمثل عدد ثواني المهملة الزمنية.

القيمة المُعادة

في حالة انتهاء المهلة الزمنية، ستعاد nil، خلا ذلك، ستُعاد المهمة الفرعية.

أمثلة

المثال الأول

مثال على استخدام التابع join‎:

a = Thread.new { print "a"; sleep(10); print "b"; print "c" }
x = Thread.new { print "x"; Thread.pass; print "y"; print "z" }
x.join # Let thread x finish, thread a will be killed on exit.
#=> "axyz"‎

المثال الثاني

يوضح المثال التالي استخدام الوسيط limit.:

y = Thread.new { 4.times { sleep 0.1; puts 'tick... ' }}
puts "Waiting" until y.join(0.15)

هذا سوف ينتج:

tick...
Waiting
tick...
Waiting
tick...
tick...

انظر أيضا

  • التابع abort_on_exception: يُعيد التابع abort_on_exception حالة الشرط "abort on exception". القيمة الافتراضية هي false.

مصادر