[Openmcl-devel] Modal dialog problems with CCL 1.9 32/64 on Mountain Lion
R. Matthew Emerson
rme at clozure.com
Thu Sep 6 14:25:18 PDT 2012
On Sep 6, 2012, at 4:32 PM, Alexander Repenning <Alexander.Repenning at colorado.edu> wrote:
> There is a lot of event handling code that includes Matt's in-main-thread:
>
> (defmacro IN-MAIN-THREAD (() &body body)
> (let ((thunk (gensym))
> (done (gensym))
> (result (gensym)))
> `(let ((,done nil)
> (,result nil))
> (flet ((,thunk ()
> (setq ,result (multiple-value-list (progn , at body))
> ,done t)))
> (gui::execute-in-gui #',thunk)
> (process-wait "Main thread" #'(lambda () ,done))
> (values-list ,result)))))
You don't have to mess around with process wait and all that values
business. (I'm pretty sure I wouldn't have used process-wait, so I doubt
that this macro is completely from me. I suppose I could have been
temporarily insane.)
gui:execute-in-gui already waits until the passed-in thunk finishes in
the main thread, and takes care of providing the return values as well.
Something like (warning, typed in mail)
(defmacro in-main-thread (() &body body)
`(gui:execute-in-gui #'(lambda () (progn , at body)))
should be all you need here.
More information about the Openmcl-devel
mailing list