التابع join‎ الخاص بالصنف Thread في روبي

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث

عند استدعاء التابع 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.

مصادر