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

Reply via email to