From: "Ara.T.Howard" Date: 2005-10-29T08:16:10+09:00 Subject: Re: What would it take to change the behaviour of variable assignment? On Sat, 29 Oct 2005, Daniel Nugent wrote: > Bah, that example wasn't good either.... > > foo = DataFlow.new > > bar = Thread.new(foo, "Monitor Thread") {|params| print params[1] + ": > " + params[0]} > > sleep(3) > > baz = Thread.new(foo, "Sleepy Thread") do |params| > print params[1] + ": Going to sleep." > sleep(3); > params[0] = "Hello World, sorry I'm late" > end harp:~ > cat a.rb require 'thread' STDOUT.sync = true class DataFlow def slots @slots ||= Hash::new{|h,k| h[k] = Queue::new} end def [] idx slots[ idx ].pop end def []= idx, val slots[ idx ].push val end end counter = Thread::new{ 42.times{|i| puts i; sleep 1} } foo = DataFlow::new bar = Thread::new(foo, "Monitor Thread"){|df, label| puts "#{ label } : #{ df[0] }"} sleep 3 baz = Thread::new(foo, "Sleepy Thread") do |df, label| puts "#{ label } : Going to sleep." sleep 3 df[0] = "Hello World, sorry I'm late" end bar.join baz.join > --output-- > [3 second pause] > "Sleepy Thread: Going to sleep." > [3 second pause] > "Monitor Thread: Hello world, sorry I'm late" harp:~ > ruby a.rb 0 1 2 Sleepy Thread : Going to sleep. 3 4 5 Monitor Thread : Hello World, sorry I'm late i still don't understand your problem? sorry! ;-) -a -- =============================================================================== | email :: ara [dot] t [dot] howard [at] noaa [dot] gov | phone :: 303.497.6469 | anything that contradicts experience and logic should be abandoned. | -- h.h. the 14th dalai lama ===============================================================================