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

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.

···

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

--
patrick

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

···

El Martes, 20 de Octubre de 2009, pawel escribió:

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

--
Iñaki Baz Castillo <ibc@aliax.net>

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
      while true
        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 Yadav

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

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

···

On 20.10.2009 00:34, Patrick Okui wrote:

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.

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/