[plt-scheme] Re: Continuous update sliders ...

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Sun Jul 6 09:05:56 EDT 2008

There are some constraints on concurrency during slider movement, at
least under Windows and Mac OS X. Other Scheme threads do not run, and
it's possible for a slider callback to be suspended (and further slider
callbacks and other events to be delayed) if the callback synchronizes
with another thread. Those constraints are related to a slight mismatch
between PLT Scheme's threading and eventspace model and the underlying
GUI toolbox's model.

Does your program involve extra threads somehow? Can you create a small
example where slider callbacks get stuck?

Matthew

At Sun, 06 Jul 2008 09:59:16 +0800, kumar wrote:
> 
> I do have the callback function, but here is what happens -
> 
> - Between mouse-down and mouse-up the callback doesn't get invoked
> and the main event processing seems to pause.
> 
> - Upon mouse-up, the callback is invoked as many times as, I think,
> the value of the slider changed between mouse-down and mouse-up
> in one go.
> 
> - Timer events that should have been generated between the mouse-down
> and mouse-up don't fire at all. That's how I came to conclude that the
> main event loop is paused.
> 
> Regards
> -Kumar
> 
> On 04 Jul 2008, at 8:19 PM, Matthew Flatt wrote:
> 
> > At Fri, 04 Jul 2008 11:23:45 +0800, kumar_lista at mac.com wrote:
> >> Hi,
> >>
> >> I need some help with the slider% class. Much appreciate any tips.
> >>
> >> The slider% class behaves modally as it stands - i.e. between  
> >> mouse-down
> >> and mouse-up on the slider control, the main event loop does not get
> >> to run.
> >> How do I configure slider% such that I can twiddle it without pausing
> >> the
> >> main event loop between mouse-down and mouse-up?
> >
> > Provide a `callback' argument when creating a `slider%'.
> >
> > The following example illustrates updating a message field
> > interactively based on the value of the slider:
> >
> >  #lang scheme/gui
> >
> >  (define f (new frame% [label "Hi"]))
> >  (define m (new message% [parent f] [label ""]
> >                [stretchable-width #t]))
> >  (new slider%
> >       [label #f] [min-value 0] [max-value 100]
> >       [parent f]
> >       [callback (lambda (s e)
> >                   (send m set-label
> >                         (format "Value is ~s" (send s get-value))))])
> >  (send f show #t)
> >


Posted on the users mailing list.