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

من موسوعة حسوب
< Ruby‏ | Thread
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>join‎</code> الخاص بالصنف <code>Thread</code> في روبي}}</noinclude> تصنيف: Ruby تصنيف...')
 
ط (مراجعة وتدقيق.)
 
(مراجعة متوسطة واحدة بواسطة مستخدم واحد آخر غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: التابع <code>join‎</code> الخاص بالصنف <code>Thread</code> في روبي}}</noinclude>
+
<noinclude>{{DISPLAYTITLE: التابع <code>Thread.join‎</code> في روبي}}</noinclude>
 
[[تصنيف: Ruby]]
 
[[تصنيف: Ruby]]
 
[[تصنيف: 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>nil</code>؛ خلا ذلك، ستُعاد [[Ruby/Thread|المهمة الفرعية]].
  
ولن يعود حتى يخرج <code>thr</code>، أو حتى تمر <code>limit</code> ثانية (انظر فقرة البنية العامة).
+
سيتم إنهاء كل [[Ruby/Thread|المهام الفرعية]] غير المضمومة (joined) عندما يخرج البرنامج الرئيسي.
  
في حالة انتهاء المهلة الزمنية، سيُعاد <code>nil</code>، خلا ذلك، سيُعاد <code>thr</code>.
+
إن أطلقت [[Ruby/Thread|المهمة الفرعية]] سابقًا استثناء ولم يتم تعيين الرايتين <code>[[Ruby/Thread/abort_on_exception|abort_on_exception]]</code> أو <code>[[Ruby/Thread/DEBUG|DEBUG]]</code> (أي أنه لم تتم معالجة الاستثناء بعد)، فسيُعالج في هذا الوقت.
 
 
سيتم إنهاء كل [[Ruby/Thread|المهمة الفرعية]] غير المضمومة (joined) عندما يخرج البرنامج الرئيسي.
 
 
 
إن أطلق [[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: سطر 13:
 
==المعاملات==
 
==المعاملات==
 
===<code>limit‎</code>===
 
===<code>limit‎</code>===
==القيمة المُعادة==
+
يمثل المهملة الزمنية لعمل المهمة الفرعية بالثانية.
 +
 
 +
==القيمة المعادة==
 +
في حالة انتهاء المهلة الزمنية <code>limit‎</code> (إن أعطيت)، ستعاد القيمة <code>nil</code>؛ خلا ذلك، تُعاد [[Ruby/Thread|المهمة الفرعية]].
 +
 
 
==أمثلة==
 
==أمثلة==
 
مثال على استخدام التابع <code>join‎</code>:
 
مثال على استخدام التابع <code>join‎</code>:
سطر 38: سطر 23:
 
x = Thread.new { print "x"; Thread.pass; print "y"; print "z" }
 
x = Thread.new { print "x"; Thread.pass; print "y"; print "z" }
 
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> مع التابع <code>join‎</code>:<syntaxhighlight lang="ruby">y = Thread.new { 4.times { sleep 0.1; puts 'tick... ' }}
==انظر أيضا==
+
puts "Waiting" until y.join(0.15)</syntaxhighlight>هذا سوف ينتج:<syntaxhighlight lang="text">tick...
* التابع <code>[[Ruby/Thread/inspect|inspect]]</code>:
+
Waiting
* التابع <code>[[Ruby/Thread/key-3F|key?‎]]</code>: يُعيد التابع <code>key?‎</code> القيمة <code>true</code> إن كانت [[Ruby/String|السلسلة النصية]] أو الرمز المعطى (انظر فقرة البنية العامة) موجودة على هيئة متغير محلي [[Ruby/Fiber|الليف]].
+
tick...
 +
Waiting
 +
tick...
 +
tick...‎</syntaxhighlight>
 +
==انظر أيضًا==
 +
* التابع <nowiki/>[[Ruby/Thread/abort_on_exception|<code></code>]]<code>[[Ruby/Thread/abort on exception-i|abort_on_exception]]</code>: يُعيد حالة الشرط "abort on exception". القيمة الافتراضية هي <code>false</code>.
 
==مصادر==
 
==مصادر==
*[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‎ في توثيق روبي الرسمي.]

المراجعة الحالية بتاريخ 07:15، 6 ديسمبر 2018

يوقف التابع join عند استدعائه تنفيذ المهمة الفرعية المُستدعيَة (calling thread)، وبدء تنفيذ المهمة الفرعية التي استُدعي معها. ولن يعود حتى تخرج (exits) المهمة الفرعية، أو حتى مرور فترة زمينة محدَّدة. في حالة انتهاء المهلة الزمنية، ستعاد القيمة nil؛ خلا ذلك، ستُعاد المهمة الفرعية.

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

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

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

join  thr
join(limit) thr

المعاملات

limit‎

يمثل المهملة الزمنية لعمل المهمة الفرعية بالثانية.

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

في حالة انتهاء المهلة الزمنية 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 مع التابع join‎:

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". القيمة الافتراضية هي false.

مصادر