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
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
···
2008/10/8 christoforever@gmail.com <christoforever@gmail.com>:
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.
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
self is an instance of Start and not MyThread here.
## neither of the previous methods execute.
puts "here is the class " + @callers[local_num].class.to_s #
spits out NilClass. Shouldent this be Thread?
You are dealing with concurrency. Which means, at this point in time
the assignment in the starting thread might not have happened yet.
You can play with the attached file to help gain understanding.
end
end
end
def finish
puts "And im spent...Simulation is over"
end
end
start = Start.new
I am not sure what you are trying to achieve but the design looks a
little awkward to me. Chances are that using another approach might
yield better results.
Cheers
robert
thread-test.rb (506 Bytes)
···
2008/10/8 christoforever@gmail.com <christoforever@gmail.com>:
--
remember.guy do |as, often| as.you_can - without end
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?
···
On Oct 8, 10:32 am, Pit Capitain <pit.capit...@gmail.com> wrote:
2008/10/8 christofore...@gmail.com <christofore...@gmail.com>:
> 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 if
It executes and throws but you do not see the exception because
Thread.abort_on_exception is likely false.
robert
···
2008/10/8 christoforever@gmail.com <christoforever@gmail.com>:
On Oct 8, 10:32 am, Pit Capitain <pit.capit...@gmail.com> wrote:
2008/10/8 christofore...@gmail.com <christofore...@gmail.com>:
> 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 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?
--
remember.guy do |as, often| as.you_can - without end