التابع Thread.join‎ في روبي

من موسوعة حسوب
< Ruby‏ | 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.

مصادر