PostMessage和SendMessage的区别
function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}
1,
PostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这是个异步消息投放函数。而SendMessage必须等待其他程
序处理消息完了之后才返回,继续执行,这是个同步消息投放函数。而且,PostMessage的返回值表示PostMessage函数执行是否正确;而
SendMessage的返回值表示其他程序处理消息后的返回值。这点大家应该都明白。
2,
如果在同一个线程内,PostMessage发送消息时,消息要先放入线程的消息队列,然后通过消息循环Dispatch到目标窗口。
SendMessage发送消息时,系统直接调用目标窗口的消息处理程序,并将结果返回。SendMessage在同一线程中发送消息并不入线程消息队
列。
如果在不同线程内。最好用PostThreadMessage代替PostMessage,他工作的很好。SendMessage发送消息到目标窗口所属
的线程的消息队列,然后发送消息的线程等待(事实上,他应该还在做一些监测工作,比如监视QS_SENDMESSAGE标志),直到目标窗口处理完并且结
果返回,发送消息的线程才继续运行。这是SendMessage的一般情况,事实上,处理过程要复杂的多。比如,当发送消息的线程监测到有别的窗口
SendMessage一个消息到来时,他直接调用窗口处理过程(重入),并将处理结果返回(这个过程不需要消息循环中GetMessage等的支持)。
3, msdn: If you send a message in the range below WM_USER to the
asynchronous message functions (PostMessage, SendNotifyMessage, and
SendMessageCallback), its message parameters can not include pointers.
Otherwise, the operation will fail.
如果发送的消息码在WM_USER之下(非自定义消息)且消息参数中带有指针,那么
PostMessage,SendNotifyMessage,SendMessageCallback这些异步消息发送函数将会调用失败。
最好不要用PostMessage发送带有指针参数的消息。
4 PostMessage
只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行
;而
SendMessage
必须等待其他程序处理消息后才返回,继续执行。
5 PostMessage
的返回值表示
PostMessage
函数执行是否正确
;而
SendMessage
的返回值表示其他程序处理消息后的返回值。
使用这两个发送消息函数的最重要的是要看你的程序是否要对消息的滞后性关注否
,PostMessage
会造成消息的滞后性
,
而
SendMessage
则不会
,
但如果
SendMessage
消息处理失败
,
则会造成程序停止
!
分享到:
相关推荐
在探讨《PostMessage和SendMessage的区别》这一主题时,我们深入分析了两种消息发送机制的特点、应用场景以及它们在多线程环境中的行为差异。通过详细解释PostMessage与SendMessage的工作原理,我们可以更好地理解这...
在Windows编程中, SendMessage 和 PostMessage 是两个非常重要的API函数,它们都用于进程间或线程间的通信,向目标窗口发送消息。然而,两者的工作机制和应用场景有所不同。 **SendMessage** 函数是同步的,它会将...
在C#中SendMessage和PostMessage的参数传递 在C#中可以使用Window API提供的SendMessage和PostMessage来传递参数。两者的区别简单介绍下:返回值的不同,我们先看一下 MSDN 里的声明: LRESULT SendMessage( HWND ...
本主题将深入探讨`FindWindow`、`PostMessage`、`SendMessage`以及`PeekMessage`这四个关键函数,它们在Windows API中扮演着重要的角色,特别是在线程间通信和窗口消息处理方面。 1. **FindWindow**: `FindWindow...
本篇文章将深入探讨如何使用MFC中的`SendMessage`和`PostMessage`函数来实现简单的进程间通信。 首先,`SendMessage`和`PostMessage`都是Windows API中处理消息的核心函数,它们都用于在窗口之间发送消息。但两者的...
2.两个对话框CMessageDlg和ConeDlg; 3.CMessageDlg为父窗口,ConeDlg为子窗口; 4.父窗口上有一个按钮用于弹出子窗口,子窗口也有一个按钮用来触发事件; 5.子窗口的按钮触发事件后,发送消息给父窗口,然后在...
在Windows API中,`PostMessage`和`SendMessage`是两个重要的消息处理函数,它们用于线程间或线程内的通信,向目标窗口发送消息。这两个函数在编程中扮演着关键角色,尤其在处理用户界面(UI)更新和异步操作时。让...
本文将深入探讨`SendMessage`和`PostMessage`这两个函数,它们都是Windows API中用于发送消息的重要工具。朱建强先生的作品,通过实例解析了这两个函数的使用方法,非常适合初学者和有经验的开发者参考。 `...
主要示例在C#中的SendMessage,PostMessage,包含两个示例,一个资料文档,希望受用。 在C#中 API 消息处理 SendMessage PostMessage 进程通信 发消息 实例 文档资料
SendMessage将CString发送和发布到Windows”指的是在Microsoft的Windows操作系统环境中,使用C++编程语言,特别是MFC(Microsoft Foundation Classes)框架时,如何利用`PostMessage`和`SendMessage`这两个API函数来...
`PostMessage`函数就是...通过分析这两个文件,你可以更深入地理解如何在VC++中使用`PostMessage`进行后台模拟按键和鼠标操作。学习这段代码有助于提升你在Windows API和C++编程上的技能,特别是与人机交互相关的部分。
资源包含两个源程序,里面是借用MFC的消息通信实现简单的两个进程间通信,嗯主要是通过SendMessage或PostMessage,功能实现简单便捷。该资源是我想搞点分数,分多的大佬麻烦赏赐点,没分的可以找找我另一个同样的...
在实际开发中,开发者需要根据具体需求选择合适的消息传递方式,如PostMessage、SendMessage、QueueUserAPC等,以实现高效且稳定的程序运行。理解并熟练掌握PostMessage的使用,对于编写高质量的Windows应用程序至关...
API :GetScrollBarInfo GetScrollInfo SetScrollInfo PostMessage SendMessage 的实例 忙得很没有整理,自用备忘!嫌文件乱就不要下啦,我自己用的,如果要下的,直接看form2里面的api类!
与`PostMessage`不同,`SendMessage`是同步的,直到消息被处理,调用才会返回。这种方法在需要确保消息被立即处理的情况下比较合适,但可能会阻塞调用线程。 3. 管道(Pipe):在Windows系统中,管道是一种低级的...
在VC++编程中,了解和正确使用`SendMessage`和`PostMessage`是非常关键的,它们都是Windows API中用于进程间通信的重要函数,用于向窗口发送消息。这两个函数虽然功能相似,但在实现方式和使用场景上有着显著的区别...
- **iframe通信**:当一个页面包含了一个来自不同源的iframe时,`postMessage`可以用来在主页面和iframe之间交换数据。 - **窗口通信**:打开的新窗口或弹窗可以通过`postMessage`向父窗口或者兄弟窗口发送消息。 - ...
`PostMessage` 和 `SendMessage` 都是Windows API中用于发送消息的函数,但它们的工作方式有所不同,尤其在异步和同步处理上有所区别。在VC++(Visual C++)环境中,我们经常需要自定义消息来实现特定功能。下面将...
如果你需要非阻塞的消息发送,可以考虑使用`PostMessage()`函数。 总结一下,通过结合QT和Windows API,我们可以利用`SendMessage()`函数实现在不同窗口之间的消息传递,提供了一种不同于QT信号槽机制的交互方式。...