在Windows应用程序的消息循环中,GetMessage()函数将在消息队列中没有消息时挂起应用程序线程,但是当消息排入消息队列时它是如何设置唤醒自身的?睡眠线程如何唤醒自己?
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
答案 0 :(得分:2)
线程不会唤醒本身。向其发送消息的线程唤醒 it 。发送消息的部分过程包括唤醒消息的接收者。
答案 1 :(得分:1)
它们的等待方式与典型的异步等待线程等待的方式相同(使用WaitForSingleObject
)。在内部(在内核级别),它们都使用名为KeWaitForSingleObject