sendmessage、postmessage和直接调用该对话框的方法,有何区别,那个好一点?
1个回答
展开全部
sendmessage、postmessage都属于消息传递机制,和直接调用该对话框相比,它俩都是间接调用,即可以模拟直接调用的过程;
sendmessage、postmessage的区别:
1 函数的返回值不同,前者返回消息处理结果,后者是BOOL表示是否传递成功;
2 postmessage是异步,即把消息放入消息队列后,就不管处理结果就走了;sendmessage是同步,即它会等消息处理完才返回;
3 因此在同一个线程中,用sendmessage处理速度更快;在多线程之间,一般postmessage这样更方便,即把消息放入目标窗口的信息队列中,然后由目标窗口通过消息循环自行派发处理。
综上,直接调用窗口更类似sendmessage,但是用消息传递函数更直接,更接近底层调用;当时方便的话,当然还是你直接调用窗口简单。
sendmessage、postmessage的区别:
1 函数的返回值不同,前者返回消息处理结果,后者是BOOL表示是否传递成功;
2 postmessage是异步,即把消息放入消息队列后,就不管处理结果就走了;sendmessage是同步,即它会等消息处理完才返回;
3 因此在同一个线程中,用sendmessage处理速度更快;在多线程之间,一般postmessage这样更方便,即把消息放入目标窗口的信息队列中,然后由目标窗口通过消息循环自行派发处理。
综上,直接调用窗口更类似sendmessage,但是用消息传递函数更直接,更接近底层调用;当时方便的话,当然还是你直接调用窗口简单。
追问
嗯,大体上明白了不少,也就是说结果差不多是一样的,就看情况更适合用那种方法了,不过我在直接调用另一个对话框的方法的时候,有时候会有回不来的情况,就是我调用了之后,它没有回来执行下面的语句,这是什么情况?
追答
那说明你调用的对话框没有执行完毕,可能正在等待用户的下一步操作或者系统的某条消息指令,导致程序阻塞了。你可以单步进去,看看哪儿被阻塞了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询