MST

星途 面试题库

面试题:C++ 中 SendMessage 与 PostMessage 的基础差异

在 C++ 的 Windows 编程环境下,简述 SendMessage 与 PostMessage 在消息处理机制、返回值方面的主要差异。
44.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

消息处理机制差异

  • SendMessage
    • 该函数会将指定的消息发送到一个窗口或多个窗口程序。它会等待接收方窗口处理完消息后才返回,即它是同步的。
    • 发送方线程会阻塞,直到接收方窗口过程函数处理完该消息。这意味着如果接收方窗口处理消息的过程中进行了耗时操作,发送方线程在此期间无法执行其他任务。
  • PostMessage
    • 此函数是将消息放入(邮寄)到与指定窗口创建的线程相关联的消息队列中,然后立即返回,是异步的。
    • 发送方线程不会等待消息被处理,而是继续执行后续代码。接收方线程在其消息循环中会按顺序从消息队列中取出消息并处理。

返回值差异

  • SendMessage
    • 返回值是接收方窗口过程函数处理该消息后的返回值。不同的消息会有不同含义的返回值,例如对于 WM_GETTEXT 消息,返回值可能是拷贝到缓冲区的字符数。
    • 如果消息处理失败,返回值可能为 0 或其他特定的错误值(依具体消息而定)。
  • PostMessage
    • 如果消息成功放入消息队列,返回值为 非零
    • 如果消息未能成功放入消息队列(例如窗口句柄无效等情况),返回值为 0