多年前我了解到,为了使用GetMessage,您需要某种形式的GUI。 没有它,windows不会创建消息队列。
我是否被错误地教导了?
编辑: MSDN说:因为系统将消息定向到应用程序中的各个窗口,所以线程必须在开始消息循环之前至少创建一个窗口。
看来我教的很好,还是有更多?
答案 0 :(得分:5)
你在这里混淆了一些事情。
首先,您可以使用GetMessage
而不在您的帖子中创建实时窗口。
OTOH OS默认情况下不会为新创建的线程创建消息队列。因此 - 对新创建的线程的调用PostThreadMessage
可能会失败。
要强制创建消息队列,您需要调用任何应该在此线程的队列上运行的函数。
简单来说,只需在该主题中调用PeekMessage
。
更多信息在这里: http://msdn.microsoft.com/en-us/library/ms644946%28v=vs.85%29.aspx
(见备注)
答案 1 :(得分:0)
对SendMessage和PostMessage的调用需要HWND作为参数。如果您没有窗口,则不会有HWND,并且无论您是否有消息队列,都无法接收消息。
编辑:我收回了它。 GetMessage允许您为HWND传递NULL参数,PostThreadMessage将在没有HWND的情况下将消息发布到队列。 PostMessage还允许HWND参数为NULL。
我每天都学到新东西!