Very interesting bug.... not sure whether this is Shoes, Cairo, or a Ruby bug...
Actually, it's not a Ruby bug, the console client works with this (Reyx) On Sun, May 3, 2009 at 11:09 AM, Hugh Sasse <[email protected]> wrote: > On Sun, 3 May 2009, Devyn Cairns wrote: > >> Oh, and it flickers a lot before it dies. >> >> On Sun, May 3, 2009 at 9:03 AM, Devyn Cairns <[email protected]> wrote: >> > What do you mean? This is what it does for me: >> > (attached) >> > >> > On Sat, May 2, 2009 at 10:53 PM, Len Lawrence <[email protected]> >> > wrote: >> >> Devyn Cairns wrote: >> >>> >> >>> Stumbled on this by accident. Try this and see what you get: >> >>> >> >>> Shoes.app do >> >>> Thread.start do >> >>> 400.times { para '', :stroke => black } >> >>> end >> >>> end >> >>> >> >>> -- >> >>> ~devyn >> >>> > > I've tried to put some diagnostics around this, to repeat the process > till it blows up but tell you about how far it got. This is on the basis > that it would allow us to compare the bugs across platforms better. > > Threads in Ruby 1.8 are supposed to be in process. I've closed the > shoes app, had the cmd window associated with it disappear, and then > had a load of shoes windows pop up afterwards. Once a window > containing the number 499 popped up but there is no way I've seen > 400 windows come and go. > > Anyway, here is the code. Maybe someone else can make it behave. > > #!shoes > # > # > > require 'thread' > > Shoes.app do > > def new_app(count) > win = window do > stack do > owner.replace_label "Threads to start" > th = Thread.start do > count.times { para '', :stroke => black } > end > th.join > owner.replace_label "Threads done" > end > end > > while not win.started() > owner.replace_label "win not started" > sleep 1 > end > sleep 1 > return win > end > > Thread.abort_on_exception=true > �...@mutex = Mutex.new > �...@count = 0 > �[email protected] do > �...@label = para "#...@count}" > end > > def replace_label str > �[email protected] do > �[email protected] "#{count} " + str > end > end > > clipboard = @count > 500.times do |i| > �...@count = i > replace_label "" > win = new_app(@count) > replace_label "got window" > sleep 5 > win.close > end > end > > > # Hugh -- ~devyn
