zeljko schrieb:
On Friday 25 of November 2011 14:33:16 Hans-Peter Diettrich wrote:
> And how does PostMessage fit into the picture?
I'm using PostMessage in an audio application to update position of
trackbar on mainform from another thread where audio file is loaded and
playing and it works ok (tested qt and gtk2)
This looks like PostMessage is thread-safe, but is not a proof.
About multiple queues: do LCL forms have an owning thread?
On Windows the owning thread is part of the window class data, but what
about other widgetsets?
... and of course you
cannot test result of PostMessage since it can be executed at any time
after posting (depends when WS event queue will process your message)
That's documented behaviour.
If you need to check for result you must use SendMessage() but in that
case you cannot use it from another thread (at least it does not work
with qt and gtk2 as I expected or I've misunderstood point of
SendMessage()).
I just wonder how a broadcast (to HWND_BROADCAST) works with
SendMessage. But this is a feature that must not be supported for
non-Windows platforms.
Qt have similar mechanism: SendEvent() & PostEvent() and it works in
same way.
Are threads supported?
The more I try to understand the Lazarus message handling, the more
questions arise :-(
Here's a snippet from the WinAPI SendMessage docs:
>>
If the specified window was created by the calling thread, the window
procedure is called immediately as a subroutine. If the specified window
was created by a different thread, the system switches to that thread
and calls the appropriate window procedure. Messages sent between
threads are processed only when the receiving thread executes message
retrieval code. The sending thread is blocked until the receiving thread
processes the message. However, the sending thread will process incoming
nonqueued messages while waiting for its message to be processed.
<<
The last sentences imply that the LCL *must* be reentrant, when
intra-thread messages are implemented. But what about possible deadlocks
then?
DoDi
--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus