calling methods of subclassed thread

C

christoforever

As you will see at the bottom of this code snippet, i've commented out
where the problem is. There are no errors but simply the methods never
execute. I cant figure out for the life of me why that is. I've tried
a few different things but nothing is working. I would love to know
what I'm doing wrong or maybe ruby cant do what im asking of it... Im
not sure either way and would love some feedback. Thanks in advance

Chris Dancy

class MyThread < Thread
def initialize(num='')
super
puts "Thread #{num} has been created"
@identity = num
@attempts = 0
@time_waiting = Time.new
@total_time = Time.new
end
def time_to_die
puts "Thread #{@identity} is dying now..."
self.kill
end
end

class Start
def initialize
@NUMBER_OF_PEOPLE = 10
@callers = Array.new(@NUMBER_OF_PEOPLE)
@phone_held = false
self.start_simulation
self.finish
end
def start_simulation
puts "Starting Simulation..."
@NUMBER_OF_PEOPLE.times do |num|
puts " " + num.to_s

@callers[num] = MyThread.new(num) do |local_num|

## I want to call this executing MyThread method time_to_die
but its not working
## this does not work, but gives no errors

@callers[local_num].time_to_die
self.time_to_die

## neither of the previous methods execute.
puts "here is the class " + @callers[local_num].class.to_s #
spits out NilClass. Shouldent this be Thread?
end
end
end

def finish
puts "And im spent...Simulation is over"
end
end
start = Start.new
 
P

Pit Capitain

2008/10/8 [email protected] said:
As you will see at the bottom of this code snippet, i've commented out
where the problem is. There are no errors but simply the methods never
execute.

Chris, add

Thread.abort_on_exception = true

before starting your code to see more clearly what's going on.
Remember that Thread.new immediately starts the thread's code, so in
your case the code runs before the assignment to the @callers array.

BTW: if you want to access the current thread you have to use Thread.current.

Regards,
Pit
 
C

christoforever

Chris, add

  Thread.abort_on_exception = true

before starting your code to see more clearly what's going on.
Remember that Thread.new immediately starts the thread's code, so in
your case the code runs before the assignment to the @callers array.

BTW: if you want to access the current thread you have to use Thread.current.

Regards,
Pit if

I assumed thats what was going on but just wanted a second opinion.
Thanks for the help. But why then if I call self.time_to_die ( bad
name for method i know) why does that not execute?
 
R

Robert Klemme

2008/10/8 [email protected] said:
I assumed thats what was going on but just wanted a second opinion.
Thanks for the help. But why then if I call self.time_to_die ( bad
name for method i know) why does that not execute?

It executes and throws but you do not see the exception because
Thread.abort_on_exception is likely false.

robert
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,578
Members
45,052
Latest member
LucyCarper

Latest Threads

Top