/* * call-seq: * Thread.list => array * * Returns an array of <code>Thread</code> objects for all threads that are * either runnable or stopped. * * Thread.new { sleep(200) } * Thread.new { 1000000.times {|i| i*i } } * Thread.new { Thread.stop } * Thread.list.each {|t| p t} * * <em>produces:</em> * * #<Thread:0x401b3e84 sleep> * #<Thread:0x401b3f38 run> * #<Thread:0x401b3fb0 sleep> * #<Thread:0x401bdf4c run> */ VALUE rb_thread_list() { rb_thread_t th; VALUE ary = rb_ary_new(); FOREACH_THREAD(th) { switch (th->status) { case THREAD_RUNNABLE: case THREAD_STOPPED: case THREAD_TO_KILL: rb_ary_push(ary, th->thread); default: break; } } END_FOREACH(th); return ary; }