大家都知道PostMessage会丢消息,但是消息队列的大小是多少呢,下面做了一个测试。

代码:
 
 1 unit Unit1;
2
3 interface
4
5 uses
6 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7 Dialogs, StdCtrls;
8
9 const
10 UM_ADD = WM_USER + 100;
11
12 type
13 TForm1 = class(TForm)
14 Label1: TLabel;
15 procedure FormCreate(Sender: TObject);
16 private
17 FVal: Integer;
18 procedure OnMsgAdd(var Msg: TMsg); message UM_ADD;
19 public
20 { Public declarations }
21 end;
22
23 var
24 Form1: TForm1;
25
26 implementation
27
28 {$R *.dfm}
29
30 procedure TForm1.FormCreate(Sender: TObject);
31 var
32 i: Integer;
33 begin
34 for i:=0 to 1000000 do
35 PostMessage(Handle, UM_ADD, 0, 0);
36 end;
37
38 procedure TForm1.OnMsgAdd(var Msg: TMsg);
39 begin
40 Inc(FVal);
41 Label1.Caption := IntToStr(FVal);
42 end;
43
44 end.

XP下运行结果:

可见,消息队列的默认长度是10000(在WIN7下运行结果是9998),队列满后消息将被丢弃。
 
如果把代码中的PostMessage改成SendNotifyMessage,运行后过了一段时间,窗口弹出:
 
所以,功能类似的SendNotifyMessage不会丢掉消息,必要时可以用它代替PostMessage。
上面的结论是错误的,SendNotifyMessage并没有那么神奇,上面的例子没有丢失消息的原因是因为
SendNotifyMessage发消息给同线程创建的窗口时,采用的是直接调用窗口函数的方式,换句话说
就是在执行SendMessage。
 
http://www.cnblogs.com/ddgg/archive/2013/03/31/2991595.html

用SendNotifyMessage代替PostMessage避免消息丢失(WIN7下消息队列的默认长度是10000,队列满后消息将被丢弃)的更多相关文章

  1. win7下用U盘装ubuntu双系统 安装完后进入ubuntu黑屏光标问题

    背景:原有win7系统,电脑中有ssd固态硬盘和电脑自带硬盘,win7是装在ssd盘上的 U盘安装ubuntu:已有之前保存的ubunbu镜像文件.iso U盘一块至少1G(我的是4G),将U盘资料备 ...

  2. 【MySQL】Win7下修改MySQL5.5默认编码格式

    一般安装MySQL程序过程中,有一步骤是选择MySQL的默认编码格式的,程序默认为Latin1编码格式,当然也可以选择第三个选项,手动选择gbk或utf8编码格式,以支持中文数据.如下图: 现在问题出 ...

  3. ActiveMQ消息丢失怎么解决?

    在消息发送过程中消息丢失的话该怎么解决(包括网络原因): 解决思路: 可以把消息唯一ID,存到表里面,当消息接受端可以获取到这个ID,就给服务端一个回复IF,消息发送出去,没有回复,THEN一直循环发 ...

  4. RocketMQ消息丢失解决方案:同步刷盘+手动提交

    前言 之前我们一起了解了使用RocketMQ事务消息解决生产者发送消息时消息丢失的问题,但使用了事务消息后消息就一定不会丢失了吗,肯定是不能保证的. 因为虽然我们解决了生产者发送消息时候的消息丢失问题 ...

  5. win7下安装Ubuntu后进不去win7的解决方法

    win7下安装Ubuntu后进不去win7的解决方法 刚刚给同学在win7下安装了Ubuntu16.04,结果在安装完后竟然无法在电脑重启后,找到win7的进入选项. 在网上找了找,都不行!就差点重装 ...

  6. Kafka无消息丢失配置

    Kafka到底会不会丢数据(data loss)? 通常不会,但有些情况下的确有可能会发生.下面的参数配置及Best practice列表可以较好地保证数据的持久性(当然是trade-off,牺牲了吞 ...

  7. rabbitmq 重复ACK导致消息丢失

    rabbitmq 重复确认导致消息丢失 背景 rabbitmq 在应用场景中,大多采用工作队列 work-queue的模式. 在一个常见的工作队列模式中,消费者 worker 将不断的轮询从队列中拉取 ...

  8. WM_PAINT消息详解,使用InvalidateRect或InvalidateRgn函数刻意产生WM_PAINT消息(WIN7里有变化,“调整视觉效果”,将“启用桌面组合”去掉)

    什么时候会触发WM_PAINT消息消息呢? 以下内容来自大名鼎鼎的<Windows程序设计(第五版)> 大多数Windows程序在WinMain中进入消息循环之前的初始化期间都要呼叫函数U ...

  9. win7下不能收到窗口hook消息的问题

    win7下由于UIPI的限制, 高权限进程无法收到底权限进程发来的消息, 因此对窗口消息hook时无法接收到消息,解决办法是在调用SetWindowsHookEx之前先调用ChangeWindowMe ...

随机推荐

  1. 【2005】N只猴子选大王

    Time Limit: 3 second Memory Limit: 2 MB N只猴子选大王.选举办法如下:从头到尾1.2.3报数,凡报3的退出,余下的从尾到头1.2.3报数,凡报3退出:余下的又从 ...

  2. 访问sharepoint站点自动使用当前用户名和密码登录

    https://blog.csdn.net/zw_2011/article/details/7417123 1.把sharepoint站点添入可信站点.   点击菜单栏“工具”——〉“Internet ...

  3. php面试题12(多态web服务器共享session的方法:将session存到数据库)($val=&$data[$key];)

    php面试题12(多态web服务器共享session的方法:将session存到数据库)($val=&$data[$key];) 一.总结 1.多态web服务器共享session的方法: ...

  4. [React] Break up components into smaller pieces using Functional Components

    We are going to ensure our app is structured in a clear way using functional components. Then, we ar ...

  5. 前端工具WebStorm好在哪里?(带详细破解教程)

    前端工具WebStorm好在哪里?(带详细破解教程) 一.总结 1.WebStorm对html特别是HTML5和JS的智能提示简直堪称大神. 2.WebStorm足够的轻量级. 3.WebStorm对 ...

  6. active set method(激活集方法)

    在优化问题的求解中,如果待优化(最大最小)的目标函数,其解集受限于一组约束条件, g1(x)≥0,-,gk(x)≥0 约束条件定义着可行域(feasible region),对于可行域中的任一点 x ...

  7. JavaScript调用ATL COM(二)

    作者:朱金灿 来源:http://blog.csdn.net/clever101 在上篇文章中介绍了如何在JS中调用ATL COM: JS调用ATL COM中的C++接口的做法 现在我们可以把它嵌入到 ...

  8. 虚拟机的ip网络设置的选择

    首先看一下vm的这几个设置 通过截图可以基本看到几个网络设置的区别,具体体现在虚拟机装好以后,网络设置会多出两个适配器,不同模式会分配不同区段的ip,需要固定时主要区段要求 所以总结一下 1.桥连,适 ...

  9. Filter,Listener(转)

    一.Filter的功能filter功能,它使用户可以改变一个 request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个reques ...

  10. Oracle数据库零散知识06 -- Package的定义与简单触发器

    CREATE OR REPLACE PACKAGE pak_02 IS--包头 --这里可定义公共参数 FUNCTION fun_01 RETURN NUMBER; PROCEDURE pro_01 ...