手机
当前位置:查字典教程网 >编程开发 >C语言 >VC中SendMessage和PostMessage的区别
VC中SendMessage和PostMessage的区别
摘要:本文实例讲述了VC中SendMessage和PostMessage的区别。分享给大家供大家参考。具体分析如下:1、首先是返回值意义的区别,我...

本文实例讲述了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程序设计有所帮助。

【VC中SendMessage和PostMessage的区别】相关文章:

浅析C语言中assert的用法

QString和char以及string之间的赋值详解

深入c语言continue和break的区别详解

exit和atexit的区别详细解析

new和malloc的区别深入解析

CreateThread()与beginthread()的区别详细解析

C++中抽象类和接口的区别介绍

c语言中static和extern的用法详细解析

基于VC中使用ForceInclude来强制包含stdafx.h的解决方法

浅析C++中memset,memcpy,strcpy的区别

精品推荐
分类导航