[Lazarus] Dispatching GUI messages from background threads
David W Noon
david.w.noon at ntlworld.com
Sun Jan 11 03:03:37 CET 2009
On Sun, 2009-01-11 at 01:17 +0100, Hans-Peter Diettrich wrote:
> David W Noon schrieb:
>
> > This looks rather like some sort of deadlock on something like a mutex
> > semaphore -- but that's just a guess. Is there some "knack" to calling
> > Dispatch() that avoids this problem?
>
> The solution is simple: don't use Dispatch() from a thread, use the
> thread-safe SendMessage instead.
The only function like that I could find was SimpleSendMessage(), which
produced the same result as Dispatch() and DeliverMessage(), but without
supplying any message data. In which unit is SendMessage() defined?
I finally resolved the issue by changing the pointer to the form into an
object reference to a TObject. After that, Dispatch() worked as
documented (such as it is documented).
Moreover, the action I needed was a "post", not a "send". It is the
"send" style of message transfer that causes deadlocks between the
worker thread and the user interface thread. This is because "send"
waits for a return code from the message handler, whereas "post" just
places the message on the queue and proceeds regardless.
--
Regards,
Dave [RLU #314465]
=======================================================================
david.w.noon at ntlworld.com (David W Noon)
=======================================================================
More information about the Lazarus
mailing list