gpt4 book ai didi

c++ - 来自另一个线程的 SendMessage() 调用是否将消息发布到消息队列?

转载 作者:搜寻专家 更新时间:2023-10-31 01:01:33 26 4
gpt4 key购买 nike

我读过关于从另一个线程调用 SendMessage() 的两个相互矛盾的概念:

  • 首先是消息会被发布到消息队列。

  • 第二种是直接调用SendMessage()。但是,调用线程会阻​​塞,上下文切换到UI线程,然后调用窗口过程,返回时,调用线程解除阻塞,上下文切换回它。

那么哪个是正确的呢?

最佳答案

SendMessage 的文档在我看来,这是相当明确的:

If the specified window was created by the calling thread, the window procedure is called immediately as a subroutine. If the specified window was created by a different thread, the system switches to that thread and calls the appropriate window procedure. Messages sent between threads are processed only when the receiving thread executes message retrieval code. The sending thread is blocked until the receiving thread processes the message.

使用 SendMessage 发送的消息永远不会放在消息队列中。换句话说,您的第一个要点是完全错误的。

在跨线程发送消息的情况下,它在拥有窗口的线程中分派(dispatch),通常是通过在接收线程的消息循环中调用 GetMessage 来分派(dispatch)。还有其他功能,例如PeekMessageSendMessage 等,将发送消息。

关于c++ - 来自另一个线程的 SendMessage() 调用是否将消息发布到消息队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29015010/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com