Win32 API中GetMessage()的内部机制?

时间:2011-11-13 05:07:20

标签: windows

在Windows应用程序的消息循环中,GetMessage()函数将在消息队列中没有消息时挂起应用程序线程,但是当消息排入消息队列时它是如何设置唤醒自身的?睡眠线程如何唤醒自己?

while (GetMessage (&msg, NULL, 0, 0))
         {
              TranslateMessage (&msg) ;
              DispatchMessage (&msg) ;
         }

2 个答案:

答案 0 :(得分:2)

线程不会唤醒本身。向其发送消息的线程唤醒 it 。发送消息的部分过程包括唤醒消息的接收者。

答案 1 :(得分:1)

它们的等待方式与典型的异步等待线程等待的方式相同(使用WaitForSingleObject)。在内部(在内核级别),它们都使用名为KeWaitForSingleObject

的内核API函数等待