简述SendMessage和PostMessage有什么区别 ?
参考答案:
SendMessage和PostMessage都是Windows API中用于发送消息到窗口的函数,但它们的工作方式和行为存在显著的差异:
- 工作方式:
SendMessage
:此函数发送消息到指定的窗口并等待窗口处理完消息后才返回。它会调用指定窗口的窗口处理过程,并且只有当窗口过程处理完该消息后,SendMessage
才会返回。这意味着发送者会被阻塞,直到消息被处理完毕。PostMessage
:此函数将消息放入创建指定窗口的线程的消息队列中,然后立即返回,不等待消息被处理。这意味着发送者不会被阻塞,消息会被放入队列中等待线程的消息循环来处理。
- 返回值:
SendMessage
:其返回值表示窗口过程处理完消息后的返回值。PostMessage
:其返回值表示PostMessage
函数是否成功地将消息放入消息队列。
- 线程处理:
- 在同一线程内,
SendMessage
发送消息时,系统由USER32.DLL模块直接调用目标窗口的消息处理程序,并将结果返回。SendMessage
在同一线程中发送消息并不入线程消息队列。 - 而
PostMessage
发送消息时,消息要先放入线程的消息队列,然后通过消息循环Dispatch到目标窗口。
综上所述,SendMessage
和PostMessage
的主要区别在于它们的工作方式、返回值以及线程处理方式。选择使用哪一个函数取决于你的具体需求,比如是否需要等待消息被处理,以及你的应用程序是否可以接受被阻塞。