[plt-scheme] Re: Continuous update sliders ...
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)
> >