A question with [Thread]

hi
when im running a code like this

     a = 0
      Thread.start{
      while true
        puts "#{a+=1}"
      end
      }

This will be terminated automatically but wont keep on looping as expected.
And by my test, the running result will always terminated while a = 41.means
after putting "41" it stops.

Im doing this in windows vista. I dont know if its OS related issue or not.
or maybe im doing wrong ? anyone can tell me?

Im still wrote:

hi
when im running a code like this

     a = 0
      Thread.start{
      while true
        puts "#{a+=1}"
      end
      }

This will be terminated automatically but wont keep on looping as
expected.

When a Ruby program terminates, all threads are killed, regardless of
their states. (pickaxe2 p. 137)

And by my test, the running result will always terminated while a =
41.means
after putting "41" it stops.

It seems strange to me that the thread would get killed at the same
point every time.

Im doing this in windows vista. I dont know if its OS related issue or
not.
or maybe im doing wrong ? anyone can tell me?

...you can wait for a particular thread to finish by calling that
thread's Thread#join method. The calling thread [e.g. your main
program] will block until the given thread is finished...If you don't
want to block forever, you can give join a timeout parameter...
(pickaxe2 p. 137)

···

--
Posted via http://www.ruby-forum.com/\.

My guess is that since you're not joining the thread to the main
thread, it just terminates after the main thread exits. Try this:

a = 0
thread = Thread.new do
  while true
    puts "#{a+=1}"
  end
end
thread.join

Alex

···

On Wed, Aug 19, 2009 at 9:51 AM, Im still<quietstill@gmail.com> wrote:

hi
when im running a code like this

a = 0
 Thread\.start\{
 while true
   puts &quot;\#\{a\+=1\}&quot;
 end
 \}

This will be terminated automatically but wont keep on looping as expected.
And by my test, the running result will always terminated while a = 41.means
after putting "41" it stops.

Im doing this in windows vista. I dont know if its OS related issue or not.
or maybe im doing wrong ? anyone can tell me?

thanks Alex. I solved it that way. :smiley:

···

2009/8/19 Alex <imphasing@gmail.com>

My guess is that since you're not joining the thread to the main
thread, it just terminates after the main thread exits. Try this:

a = 0
thread = Thread.new do
  while true
   puts "#{a+=1}"
end
end
thread.join

Alex

On Wed, Aug 19, 2009 at 9:51 AM, Im still<quietstill@gmail.com> wrote:
> hi
> when im running a code like this
>
> a = 0
> Thread.start{
> while true
> puts "#{a+=1}"
> end
> }
>
> This will be terminated automatically but wont keep on looping as
expected.
> And by my test, the running result will always terminated while a =
41.means
> after putting "41" it stops.
>
> Im doing this in windows vista. I dont know if its OS related issue or
not.
> or maybe im doing wrong ? anyone can tell me?
>