[racket] Asynchronously inserting text to editor%

From: Eli Barzilay (eli at barzilay.org)
Date: Mon Aug 25 23:09:35 EDT 2014

You generally can't do that kind of stuff from a different thread...
After fighting with this for a while I eventually realized that it's
not too hard to avoid the extra thread: instead of doing the work
there, just stick it in a closure that is handed to `queue-callback'.
(This is based on lessons learned the hard way in an application that
does a lot of this kind of stuff...)


On Sun, Aug 24, 2014 at 5:00 PM, Dmitry Cherkassov
<dcherkassov at gmail.com> wrote:
> Hi. I am asyncrhonously insert text strings to editor% (from another thread)
>
> The problem is that i sometimes get this exception from object of editor% class:
>
> sequence-contract-violation: negative: method insert cannot be called,
> except in states (unlocked)
>
> I've tried to loop while editor is locked calling these functions
> http://docs.racket-lang.org/gui/editor___.html#%28meth._%28%28%28lib._mred%2Fmain..rkt%29._editor~3c~25~3e%29._locked-for-flow~3f%29%29
>
> But it seems they do not work for me (do not return if editor is
> locked) and still that exception in caused.
>
> I've fallen back to ugly loop then.
>
> (define retry (call/cc (lambda (k) k)))
>
> (with-handlers ([exn:fail?
>                  (lambda (ex)
>                    (sleep 1)
>                    (retry retry))])
>                (send editor insert message))
>
>
> Is there a better way?
>
> P.S Full source code for that stuff is available there:
> -------------------------------------------------------------------------------
>
> https://github.com/lehitoskin/blight/blob/master/msg-history.rkt#L143
>
> `add-recv-message' is called by `on-friend-message':
> https://github.com/lehitoskin/blight/blob/master/blight.rkt#L956
>
> which is called back by `callback-friend-message' C function:
> https://github.com/lehitoskin/libtoxcore-racket/blob/master/functions.rkt#L489
> ----------------------------------------------------------------------------------
>
> Thank you.
>
> --
> With best regards,
> Dmitry
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users



-- 
          ((lambda (x) (x x)) (lambda (x) (x x)))          Eli Barzilay:
                    http://barzilay.org/                   Maze is Life!

Posted on the users mailing list.