Method: Thread#join
- Defined in:
- thread.c
#join ⇒ Object #join(limit) ⇒ Object
The calling thread will suspend execution and run this thr.
Does not return until thr exits or until the given limit seconds have passed.
If the time limit expires, nil will be returned, otherwise thr is returned.
Any threads not joined will be killed when the main program exits.
If thr had previously raised an exception and the ::abort_on_exception or $DEBUG flags are not set, (so the exception has not yet been processed), it will be processed at this time.
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"
The following example illustrates the limit parameter.
y = Thread.new { 4.times { sleep 0.1; puts 'tick... ' }}
puts "Waiting" until y.join(0.15)
This will produce:
tick...
Waiting
tick...
Waiting
tick...
tick...
955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 |
# File 'thread.c', line 955 static VALUE thread_join_m(int argc, VALUE *argv, VALUE self) { rb_thread_t *target_th; double delay = DELAY_INFTY; VALUE limit; GetThreadPtr(self, target_th); rb_scan_args(argc, argv, "01", &limit); if (!NIL_P(limit)) { delay = rb_num2dbl(limit); } return thread_join(target_th, delay); } |