当前位置: 首页 > 编程笔记 >

VC中SendMessage和PostMessage的区别

闾丘山
2023-03-14
本文向大家介绍VC中SendMessage和PostMessage的区别,包括了VC中SendMessage和PostMessage的区别的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了VC中SendMessage和PostMessage的区别。分享给大家供大家参考。具体分析如下:

1、首先是返回值意义的区别,我们先看一下 MSDN 里的声明:

LRESULT SendMessage (  HWND hWnd,

        UINT Msg,

        WPARAM wParam,

        LPARAM lParam );

BOOL PostMessage(  HWND hWnd,

        UINT Msg,

        WPARAM wParam,

        LPARAM lParam);

 
其中 4 个参数的意义是一样的,返回值类型不同(其实从数据上看他们一样是一个 32 位的数,只是意义不一样),LRESULT 表示的是消息被处理后的返回值,BOOL 表示的是消息是不是 Post 成功。
 
2、PostMessage 是异步的,SendMessage 是同步的。

PostMessage 只把消息放入队列,不管消息是否被处理就返回,消息可能不被处理;而 SendMessage 等待消息被处理完了之后才返回,如果消息不被处理,发送消息的线程将一直被阻塞。
 
3、sendmessage发送消息不经过消息队列,会被直接处理。但是sendmessage一直等待,知道消息被处理才返回
 
4、系统只整理和编号系统消息(0 到 WM_USER 之间的消息),发送用户消息(WM_USER 以上)到别的进程时,需要自己定义

用 PostMessage、SendNotifyMessage、SendMessageCallback 等异步函数发送系统消息时,参数里不可以使用指针,因为发送者并不等待消息的处理就返回,接受者还没处理指针就已经被释放了。
 
5、在 Windows 2000/XP 里,每个消息队列最多只能存放 10,000 个 Post 的消息,超过的还没被处理的将不会被处理,直接丢掉。这个值可以改得更大:[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Windows] USERPostMessageLimit,最小可以是 4000。

希望本文所述对大家的VC程序设计有所帮助。

 类似资料:
  • 发送消息到窗口或控件(SendMessage 还会等待回复)。 PostMessage, Msg [, wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText] SendMessage, Msg [, wParam, lParam, Control, WinTitle, WinText, ExcludeTitle,

  • 本文向大家介绍vc中SendMessage自定义消息函数用法实例,包括了vc中SendMessage自定义消息函数用法实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了vc中SendMessage自定义消息函数用法,分享给大家供大家参考。具体如下: SendMessage的基本结构如下: 其中一些参数的由来如下: //typedef unsigned int UINT; //typede

  • 本文向大家介绍VC中CWinThread类以及和createthread API的区别分析,包括了VC中CWinThread类以及和createthread API的区别分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了VC中CWinThread类以及和createthread API的区别分析,分享给大家供大家参考。具体分析如下: CWinThread CObject  └CCmdTa

  • 本文向大家介绍VC中SDK与MFC的区别浅析,包括了VC中SDK与MFC的区别浅析的使用技巧和注意事项,需要的朋友参考一下 本文浅析了vc中SDK与MFC的区别,对于初学VC的朋友有一定的学习借鉴价值,详情如下: SDK 是指Software Development Kit 软件开发包 MFC 是指Microsoft Foundation Classes 微软函数类库 因此MFC是对API函数的封

  • 该插件实现了跨窗口的消息传递。现在很多浏览器都支持通过 windows.postMessage 跨窗口、跨域、跨源的消息传递,该插件就是对 windows.postMessage 方法进行简单封装,提供 jQuery 风格的调用方式。 示例代码: pm({ target: window.frames["example1"], type:"message1", data:{hello:"world"}});

  • VC-Logger 是一个简单易用的 C++ 程序通用日志组件。设计时着重考虑三个方面:功能、可用性和性能。为了让大家能更方便的学习 VC-Logger,特此精心制作了几个测试用例:TestGUILogger(GUI 版本测试用例 / 静态加载)、TestDynamicLogger(GUI 版本测试用例 / 动态加载)、TestConsoleLogger(Console 版本测试用例 / 静态加载