Am 26.04.2010 10:59, schrieb Michael Schnell:
On 04/23/2010 05:37 PM, Duncan Parsons wrote:
Note in http://msdn.microsoft.com/en-us/library/ms644950(VS.85).aspx
where it says '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.'
I did read this, but in fact I can't understand the meaning. If the
thread stops in "Send Message", it obviously is not in a
"waitForMessage" function. At what code would it start running if a
message to be processed arrives ?
-Michael
Hi!
I don't know how big your interest is in this topic, but you might take
a look at the source code of ReactOS. There you can see what's happening
inside a SendMessage.
To speed up your research I've looked a bit by myself:
SendMessage(W) is defined in dll\win32\user32\windows\message.c. After
some preparing (and checking whether it the message can be send directly
(same thread)) it finally calls NtUserSendMessage which is defined in
subsystems\win32\win32k\ntuser\message.c.
There it jumps around a bit in internal function (co_IntDoSendMessage =>
co_IntSendMessage => co_IntSendMessageTimeout =>
co_IntSendMessageTimeoutSingle) to finally pass the message into the
message queue using co_MsqSendMessage which is defined in
subsystems\win32\win32k\ntuser\msgqueue.c.
If you look there you'll see a KeWaitForSingleObject or a
KeWaitForMultipleObjects which basically waits for an event which is
initialized in this function. This event might signal the completion of
the message passing (I haven't studied the code in detail though, so the
last assumption might be wrong).
Regards,
Sven
--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus