Application.HandleMessage与Application.ProcessMessage
HandleMessage:
HandleMessage中断应用程序的执行,以便Windows可以在将控制权返回给应用程序之前处理来自Windows消息队列的单个消息。
如果消息队列为空,则HandleMessage生成OnIdle事件并启动更新应用程序中的操作的过程。
注意:如果应用程序空闲,HandleMessage可能需要很长时间才能返回。
因此,在等待基于消息的事务时,不要在处理优先级操作时调用HandleMessage。 相反,在处理的不仅仅是消息时调用ProcessMessages。
ProcessMessage:
ProcessMessages不允许应用程序空闲,而HandleMessage则允许。
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
procedure MyIdleHandler(Sender: TObject; var Done: Boolean);
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} var
{ Global variables to show the order of events }
XPos, YPos, Delta: integer; procedure StatusMsg(
MyForm : TForm1; Canvas : TCanvas; Message : string; Bkg : Boolean);
begin
if not bkg then
Canvas.Font.Style := [fsBold]; {Foreground messages are in bold type. }
Canvas.TextOut(XPos, YPos, Message);
if not bkg then
Canvas.Font.Style := [];
{ Change Xpos and YPos to prepare for the next message. }
Ypos := Ypos + Delta;
if YPos >= MyForm.ClientHeight - 10 then
begin
YPos := 10;
Xpos := Xpos + 180;
end;
if (Xpos >= MyForm.ClientWidth - 100) then
begin
if (Canvas.Font.Color = clRed) then
Canvas.Font.Color := clBlack
else
Canvas.Font.Color := clRed;
Xpos := 10;
end;
end; procedure TForm1.FormCreate(Sender: TObject);
begin
Button1.Caption := 'Do not yield';
Button2.Caption := 'Handle Message';
Application.OnIdle:= MyIdleHandler;
XPos := 10;
YPos := 10;
Delta := Abs(Canvas.Font.Height) + 1;
end; procedure TForm1.Button1Click(Sender: TObject);
var
I, J, X, Y: Word;
begin
StatusMsg(
Form1, Canvas, 'The synchronous handler is starting', False);
I := 0;
J := 0;
while I < 10 do
begin
Randomize;
while J < 10 do
begin
Y := Random(J);
Inc(J);
end;
X := Random(I);
Inc(I);
end;
StatusMsg(
Form1, Canvas, 'The synchronous handler is done', False); end; procedure TForm1.Button2Click(Sender: TObject);
var
I, J, X, Y: Word;
begin
//同时执行onIdle事件和当前任务
StatusMsg(
Form1, Canvas, 'The asynchronous handler is starting', False);
I := 0;
J := 0;
while I < 100 do
begin
Randomize;
while J < 10 do
begin
Y := Random(J);
Inc(J);
end;
X := Random(I);
Inc(I);
{ yield to OnIdle or other messages }
// PostMessage(Handle,WM_PAINT,0,0); 假如消息队列不是空,则不会生成onIdle事件
Application.HandleMessage;
end;
StatusMsg(
Form1, Canvas, 'The asynchronous handler is done', False); end; procedure TForm1.FormShow(Sender: TObject);
begin end; { TForm1 } procedure TForm1.MyIdleHandler(Sender: TObject; var Done: Boolean);
begin
StatusMsg(
Form1, Canvas, 'This represents a background process.', True);
end; end.
Application.HandleMessage与Application.ProcessMessage的更多相关文章
- Jsoup问题---获取http协议请求失败 org.jsoup.UnsupportedMimeTypeException: Unhandled content type. Must be text/*, application/xml, or application/xhtml+xml.
Jsoup问题---获取http协议请求失败 1.问题:用Jsoup在获取一些网站的数据时,起初获取很顺利,但是在访问某浪的数据是Jsoup报错,应该是请求头里面的请求类型(ContextType)不 ...
- Jsoup获取部分页面数据失败 org.jsoup.UnsupportedMimeTypeException: Unhandled content type. Must be text/*, application/xml, or application/xhtml+xml.
用Jsoup在获取一些网站的数据时,起初获取很顺利,但是在访问某浪的数据是Jsoup报错,应该是请求头里面的请求类型(ContextType)不符合要求. 请求代码如下: private static ...
- application/json和application/x-www-form-urlencoded使用选择
一.参考资料 选application/x-www-form-urlencoded还是application/json? @RequestBody应用 二.理解 1.@RequestBody的作用 注 ...
- SpringBoot application.properties (application.yml)优先级从高到低
SpringBoot application.properties(application.yml) 优先级从高到低 SpringBoot配置文件优先级从高到低 =================== ...
- jdb--gdb---java 远程调试(java application与web application)
命令比较 gdb jdb bt where del clear stop brea ...
- Ajax的text/plain、application/x-www-form-urlencoded和application/json
Ajax的text/plain.application/x-www-form-urlencoded和application/json HTTP请求中,如果是get请求,那么表单参数以name=valu ...
- application/json和application/x-www-form-urlencoded区别
application/json和application/x-www-form-urlencoded都是表单数据发送时的编码类型. EncType: enctype 属性规定在发送到服务器之前应该如何 ...
- Application Architecture Determines Application Performance
 Application Architecture Determines Application Performance Randy Stafford AppliCATion ARCHiTECTuR ...
- 应用程序池和应用程序域的区别(Difference between application pool and application domain)
来自StackOverFlow: http://stackoverflow.com/questions/8486335/difference-between-an-application-domai ...
- spring学习十二 application/x-www-form-urlencoded还是application/json
application/x-www-form-urlencoded还是application/json get. POST 用哪种格式? 后台如何得到这些值? 如何用ajax 或者是 postman ...
随机推荐
- VIM、VI编辑中一个Tab设置为4个空格
配置方式 配置方式主要两种: 当前用户目录下创建或修改~/.vimrc Root用户下修改/etc/virc 和 /etc/vimrc 在文件末尾添加如下内容: set ts=4 set softta ...
- JAVA流程控制(查漏补缺)
JAVA流程控制(查漏补缺) 目录 JAVA流程控制(查漏补缺) if 判断 switch多重选择 编译检查 for循环 for each break和continue if 判断 要判断引用类型的变 ...
- 「SOL」Permanent (Codeforces)
这道题第一个结论都不知道怎么拿部分分啊 题意 一个 \(n\times n\) 的方阵 \(M\),上面除了 \(k\) 个特殊位置,其他位置都是 \(1\).第 \(i\) 个特殊位置在 \((x_ ...
- Linux学习 --- 网络基础知识
1.1 IP地址 IP地址由两部分组成 网络号和主机号 .网络号为IP地址的高位组成,而主机号是IP地址的低位组成,两个的大小取决于网络的类型. IP地址根据网络的地址不同分为:A类,B类,C类, ...
- 12组-Beta冲刺-总结
组长博客链接 https://www.cnblogs.com/147258369k/p/15615820.html 一.基本情况 1.1 现场答辩总结 柯老师意见: 面向普通用户群体推出排行榜功能 增 ...
- SignalR v3.1.3.js [支持微信小程序]
微信小程序开发中想做实时通知功能.作为一个.net系的程序员,当然首选SignalR,但是默认的js客户端库不支持微信小程序,因为微信小程序的websocket是使用自己的一套相关api来创建和管理的 ...
- php对接飞书机器人报警接口
<?php function request_by_curl($remote_server, $post_string) { $ch = curl_init(); curl_setopt($ch ...
- clickhouse-数据副本踩坑
数据副本--失败,看日志 vim /var/log/clickhouse-server/clickhouse-server.err.log select * from system.replicati ...
- 通过Container制作Image
1.拉取tomcat镜像 docker pull tomcat docker images 2.根据tomcat镜像创建一个tomcat container docker run -d -it --n ...
- linux 复合页( Compound Page )的介绍
1.复合页的定义: 复合页(Compound Page)就是将物理上连续的两个或多个页看成一个独立的大页,它可以用来创建hugetlbfs中使用的大页(hugepage), 也可以用来创建透明大页( ...