面试题答案
一键面试消息处理机制差异
- SendMessage:
- 该函数会将指定的消息发送到一个窗口或多个窗口程序。它会等待接收方窗口处理完消息后才返回,即它是同步的。
- 发送方线程会阻塞,直到接收方窗口过程函数处理完该消息。这意味着如果接收方窗口处理消息的过程中进行了耗时操作,发送方线程在此期间无法执行其他任务。
- PostMessage:
- 此函数是将消息放入(邮寄)到与指定窗口创建的线程相关联的消息队列中,然后立即返回,是异步的。
- 发送方线程不会等待消息被处理,而是继续执行后续代码。接收方线程在其消息循环中会按顺序从消息队列中取出消息并处理。
返回值差异
- SendMessage:
- 返回值是接收方窗口过程函数处理该消息后的返回值。不同的消息会有不同含义的返回值,例如对于
WM_GETTEXT
消息,返回值可能是拷贝到缓冲区的字符数。 - 如果消息处理失败,返回值可能为
0
或其他特定的错误值(依具体消息而定)。
- 返回值是接收方窗口过程函数处理该消息后的返回值。不同的消息会有不同含义的返回值,例如对于
- PostMessage:
- 如果消息成功放入消息队列,返回值为
非零
。 - 如果消息未能成功放入消息队列(例如窗口句柄无效等情况),返回值为
0
。
- 如果消息成功放入消息队列,返回值为