From: Tiziano Merzi Date: 2007-12-31T17:53:15+09:00 Subject: Re: a loop in a thread... very greedy Abraham Tio wrote: > 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: > here a woking code class Simulator attr_accessor :running attr_accessor :sim_thread def start @running = true; #instance var puts "starting simulator..." @sim_thread= Thread.new(){ #instance var 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 no 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 # wait simulator end simulator.sim_thread.join Enjoy! -- Posted via http://www.ruby-forum.com/.