الفرق بين المراجعتين لصفحة: «Ruby/Thread/join»
لا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) ط مراجعة وتدقيق. |
||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE: التابع <code>join | <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|المهمة الفرعية]] التي استُدعي معها. ولن يعود حتى تخرج (exits) [[Ruby/Thread|المهمة الفرعية]]، أو حتى مرور فترة زمينة محدَّدة. في حالة انتهاء المهلة الزمنية، ستعاد القيمة <code>nil</code>؛ خلا ذلك، ستُعاد [[Ruby/Thread|المهمة الفرعية]]. | |||
في حالة انتهاء المهلة الزمنية، ستعاد <code>nil</code> | |||
سيتم إنهاء كل [[Ruby/Thread|المهام الفرعية]] غير المضمومة (joined) عندما يخرج البرنامج الرئيسي. | سيتم إنهاء كل [[Ruby/Thread|المهام الفرعية]] غير المضمومة (joined) عندما يخرج البرنامج الرئيسي. | ||
إن أطلقت [[Ruby/Thread|المهمة الفرعية]] | إن أطلقت [[Ruby/Thread|المهمة الفرعية]] سابقًا استثناء ولم يتم تعيين الرايتين <code>[[Ruby/Thread/abort_on_exception|abort_on_exception]]</code> أو <code>[[Ruby/Thread/DEBUG|DEBUG]]</code> (أي أنه لم تتم معالجة الاستثناء بعد)، فسيُعالج في هذا الوقت. | ||
==البنية العامة== | ==البنية العامة== | ||
<syntaxhighlight lang="ruby">join → thr | <syntaxhighlight lang="ruby">join → thr | ||
سطر 15: | سطر 13: | ||
==المعاملات== | ==المعاملات== | ||
===<code>limit</code>=== | ===<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" } | ||
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... | |||
يوضح المثال التالي استخدام | |||
puts "Waiting" until y.join(0.15)</syntaxhighlight>هذا سوف ينتج:<syntaxhighlight lang=" | |||
Waiting | Waiting | ||
tick... | tick... | ||
سطر 37: | سطر 30: | ||
tick... | tick... | ||
tick...</syntaxhighlight> | tick...</syntaxhighlight> | ||
==انظر | ==انظر أيضًا== | ||
* التابع <nowiki/>[[Ruby/Thread/abort_on_exception|<code></code>]]<code>[[Ruby/Thread/ | * التابع <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 قسم | *[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
.