Threads terminating

Why this simple program give no output, and terminates immidiatly
after its launched? There should be thread running and giving lots of
‘lala’, am I right?
class Bar
def initialize

end
def foo
Thread.new do
while true
puts “lala\n”
end
end
end
end

b=Bar.new
b.foo

El Martes, 20 de Octubre de 2009, pawel
escribió:> puts “lala\n”

  end
end

end
end

b=Bar.new
b.foo

When you create a thread, the main threads continues. In you case the
main
thread terminates after calling “Thread.new” so the program exists.

If you want to wait all the created threads to finish their work, then
you
must “join” them:

my_thread = Thread.new do … end
do other stuff in main thread
my_thread.join

On 20 Oct, 2009, at 1:05 AM, pawel wrote:

Why this simple program give no output, and terminates immidiatly
after its launched? There should be thread running and giving lots of
‘lala’, am I right?
class Bar
def initialize

end
def foo
Thread.new do

try changing this to a = Thread.new

 while true
   puts "lala\n"
 end

end

then add an a.join here

end
end

b=Bar.new
b.foo

Someone else would have to explain why that happens. Don’t know enough
about threads (let alone ruby’s) to explain that.

pawel wrote:

    puts "lala\n"
  end
end

end
end

b=Bar.new
b.foo

Hi Pawel, here is one example, see if you can follow it.

class Bar
def initialize( msg )
@msg = msg
end
def foo
t_exit = Time.now.to_i + 3
while true
puts @msg
break if Time.now.to_i > t_exit
sleep 0.5
end
end
end

b1 = Thread.new{ Bar.new(“x”).foo }
b2 = Thread.new{ Bar.new(“o”).foo }

here main thread waits for thread b1 and b2 to exit

b1.join
b2.join


Kind Regards,
Rajinder Y.

http://DevMentor.org
Do Good ~ Share Freely

On 20.10.2009 00:34, Patrick O. wrote:

Thread.new do

end
end

b=Bar.new
b.foo

Someone else would have to explain why that happens. Don’t know enough
about threads (let alone ruby’s) to explain that.

All threads other than main are demon threads in Ruby, i.e. as has been
explained they do not keep the process alive.

Kind regards

robert