1. SendMessage 是同步的;PostMessage 是异步的
SendMessage必须等待其他程序处理消息完了之后才返回,继续执行,这是个同步消息投放函数。
PostMessage只把消息放入队列,不管其他程序是否处理都马上返回,然后继续执行,这是个异步消息投放函数。
2. 返回值类型不同。
SendMessage表示的是消息被处理后的返回值
PostMessage表示的是消息是不是 Post 成功
3.
如果在同一个线程内:
SendMessage在同一线程中发送消息并不入线程消息队列。
PostMessage发送消息时,消息要先放入线程的消息队列,然后通过消息循环Dispatch到目标窗口。SendMessage发送消息时,系统直接调用目标窗口的消息处理程序,并将结果返回。
如果在不同线程内:
SendMessage发送消息到目标窗口所属的线程的消息队列,然后发送消息的线程等待(事实上,他应该还在做一些监测工作,比如监视QS_SENDMESSAGE标志),直到目标窗口处理完并且结果返回,发送消息的线程才继续运行。
sendmessege() 给其他进程发送消息时消息可以进入消息队列,而给自身进程发送消息是消息不会进入消息队列
最好用PostThreadMessage代替PostMessage.