跳到主要内容

简述SendMessage和PostMessage有什么区别 ?

参考答案:

SendMessage和PostMessage都是Windows API中用于发送消息到窗口的函数,但它们的工作方式和行为存在显著的差异:

  1. 工作方式:
  • SendMessage:此函数发送消息到指定的窗口并等待窗口处理完消息后才返回。它会调用指定窗口的窗口处理过程,并且只有当窗口过程处理完该消息后,SendMessage才会返回。这意味着发送者会被阻塞,直到消息被处理完毕。
  • PostMessage:此函数将消息放入创建指定窗口的线程的消息队列中,然后立即返回,不等待消息被处理。这意味着发送者不会被阻塞,消息会被放入队列中等待线程的消息循环来处理。
  1. 返回值:
  • SendMessage:其返回值表示窗口过程处理完消息后的返回值。
  • PostMessage:其返回值表示PostMessage函数是否成功地将消息放入消息队列。
  1. 线程处理:
  • 在同一线程内,SendMessage发送消息时,系统由USER32.DLL模块直接调用目标窗口的消息处理程序,并将结果返回。SendMessage在同一线程中发送消息并不入线程消息队列。
  • PostMessage发送消息时,消息要先放入线程的消息队列,然后通过消息循环Dispatch到目标窗口。

综上所述,SendMessagePostMessage的主要区别在于它们的工作方式、返回值以及线程处理方式。选择使用哪一个函数取决于你的具体需求,比如是否需要等待消息被处理,以及你的应用程序是否可以接受被阻塞。