On Tue, Apr 15, 2008 at 10:50:14AM +0200, ruby francisoud wrote:
> I made a tiny "time bomb" app with Shoes.
> But after runnning it for a few hours, the shoes process is eating and
> consuming lots of memory until it crash and vanish :(

It's true.  You will want to split your app up into classes or
methods.  Ruby does not garbage collect if everything stays in the
top scope.

Something like:

  class TimeBomb < Shoes
    url "/", :setup
  
    def setup
      stack :margin => 10 do
        counter = Counter.new(Time.parse("05/30/2008 17:30"))
        animate(100) do
          redraw
        end
      end
    end
  
    def redraw
      clear do
        background black
        stack do
          style = {:align => "center", :stroke => white}
          counter.update
          para "Tic Tac...", style
          label = strong(counter.left) if(counter.time_left > 0)
          label = strong("Boom!") if(counter.time_left <= 0)
          para label, style
        end
      end
    end
  end
  
  Shoes.app :height => 100, :width => 350

Even better would be to just use `replace` on the labels rather than
clearing the whole slot.  Samples like samples/simple-anim-text.rb
and samples/simple-timer.rb illustrate how.

_why

Reply via email to