You could give each frame in its own eventspace. At Tue, 17 Apr 2012 11:45:20 -0600, Neil Toronto wrote: > Would it be possible to change plot so that its windows always behave > like this? Could I make it not require cooperation from the program that > calls `plot-frame'? > > This is going to come up every time someone wants to pop up plot windows > in a non-GUI, interactive loop. > > Neil ⊥ > > On 04/17/2012 10:48 AM, Matthew Flatt wrote: > > All GUI activity like window drawing happens only in the main thread of > > an eventspace. Your program also starts out in the main thread. So, > > yes, drawing has to wait until your loop completes. > > > > One solution is to put your loop in a separate thread. The example > > below creates a thread and passes it to `yield' to wait until the > > thread is done. The `yield' function is special in that it lets other > > GUI activity happen while it waits: > > > > #lang at-exp racket > > (require plot > > racket/gui/base) > > (plot-new-window? #t) > > (yield > > (thread > > (lambda () > > (let loop () > > (let ((dummy (read))) > > (if (and (number? dummy) (zero? dummy)) > > (void) > > (begin > > (plot (function (λ(x) (* x x)) -2 2)) > > (loop)))))))) > > > > Although the above should work, it's not really a good idea to perform > > GUI actions outside of the main thread. So, here's an improved version > > that uses `queue-callback' to send the `plot' call back to the main > > thread: > > > > #lang at-exp racket > > (require plot > > racket/gui/base) > > (plot-new-window? #t) > > (yield > > (thread > > (lambda () > > (let loop () > > (let ((dummy (read))) > > (if (and (number? dummy) (zero? dummy)) > > (void) > > (begin > > ;; queue a callback instead of `plot' directly: > > (queue-callback > > (lambda () > > (plot (function (λ(x) (* x x)) -2 2)))) > > (loop)))))))) > > > > For more information, see > > > > > http://docs.racket-lang.org/gui/windowing-overview.html#(part._eventspaceinfo) > > > > > > At Tue, 17 Apr 2012 10:40:55 -0400, Deren Dohoda wrote: > >> I was messing around with a spline utility last night and was using > >> the plot-new-window? setting to get a plot. The goal was to share an > >> exe with a coworker who doesn't have Racket. Just a command-line app > >> but to get the plot to display I needed a window and this seemed > >> awesome. The problem is I couldn't get the plot to display when the > >> thread was in a procedure. The window would appear but it was like the > >> plot backend wasn't free to draw to it. Here's a way to reproduce it > >> on v5.2: > >> > >> #lang at-exp racket > >> (require plot) > >> (plot-new-window? #t) > >> (let loop () > >> (let ((dummy (read))) > >> (if (and (number? dummy) (zero? dummy)) > >> (void) > >> (begin > >> (plot (function (λ(x) (* x x)) -2 2)) > >> (loop))))) > >> > >> So long as you are looping, new windows will appear without plot > >> contents. When you finally quit (here by entering the number zero) all > >> the plots are drawn in those windows. Any help? Did I do something > >> horribly dumb? > >> > >> Thanks, > >> Deren > >> > >> ____________________ > >> Racket Users list: > >> http://lists.racket-lang.org/users > > > > ____________________ > > Racket Users list: > > http://lists.racket-lang.org/users > > ____________________ > Racket Users list: > http://lists.racket-lang.org/users
____________________ Racket Users list: http://lists.racket-lang.org/users

