From: Abraham Tio Date: 2007-12-31T12:52:37+09:00 Subject: a loop in a thread... very greedy need a class(we'll call it a 'simulator' since that's what i'm attempting to write) to run a loop. need that loop to stop when asked to, such as when the user that started it clicks a button to stop it. i write java that does this sort of thing all the time. HOWEVER, when i try it in ruby, only bad things happen. check this out: ***start r.rb*** class Simulator attr_accessor :running attr_accessor :sim_thread def start running = true; puts "starting simulator..." sim_thread= Thread.new(){ puts "sim thread started" while(running) 300000.times do |x| x+=1 end puts 'did a buncha stuff a simulator might do' Thread.pass end puts "sim thread stopped" } sim_thread.join sim_thread end def stop puts "stopping simulator..." running = false end end Thread.abort_on_exception = true simulator = Simulator.new thread = simulator.start puts "started simulator, now we stop it.." simulator.stop ***end r.rb*** i get no exceptions in the thread. the output: starting simulator... sim thread started did a buncha stuff a simulator might do did a buncha stuff a simulator might do did a buncha stuff a simulator might do this line never executes: puts "started simulator, now we stop it.." why does ruby not leave the thread lone to do its thing, and do other things ? instead, it seems to get stuck in the while loop, as if i didn't put it in a separate thread. any help much appreciated, thanks. -- Posted via http://www.ruby-forum.com/.