TApplication元件的OnIdle事件

例子1 测试 时,CPU并没有占用100%  不知道是否Delphi高版本已优化。

 

 

声明:Property OnIdle:TIdleEvent;
其中:TIdleEvent是这样声明的:
TIdleEvent=Procedure(Sender:TObject;Var Done:Boolean) of Object;

这个事件发生在系统空闲的时候,例如程序在等待用户输入,这时候
我们可以完成一些后台的工作,如加载数据库信息、处理图片等。
当参数Done为True时,事件句柄完成后,除非应用程序又处理过一个
消息,而该消息对列到现在又清空了,否则该事件不会被激活;如果
将Done设为False,在应用程序等待消息时,该事件将被连续激活。

由于在执行OnIdle事件句柄时,应用程序不会响应外部事件,因此,
尽可能保证过程简短,或大量使用ProcessMessage调用。

举一个例子:
我们在程序的状态栏上显示时间,你可以不必做一个定时器去刷新状
态栏,只要响应OnIdle事件,在程序空闲的时候做这个事情就可以了。
程序如下:
Procedure TForm1.DisplayTime(Sender:TObject;Var Done:Boolean);
begin
  StatusBar1.Panels[0].Text:=TimeToStr(Now);
  Done:=False;
end;

Procedure TForm1.FormCreate(Sender:TObject);
begin
Application.OnIdle:=DisplayTime;
end:

Procedure TForm1.FormClose(Sender:TObject;Var Action:TCloseAction);
begin
Application.OnIdle:=Nil;
end;

在上例中,将Done设为False,所以在状态栏上能够实时显示时间,如果
将其设True,则只要没有产生消息,状态栏上的时间不会改变,直到移
动鼠标或是按下键等,状态栏上时间才会刷新,这就是Done参数的作用。

执行以上程序时,如果打开“系统监视器”,你会发现CPU的使用率是
100%,这是因为系统所有的空闲时间都用来在你的状态栏上显示时间。

OnIdle最好的用处在于后台装载数据库,比如我在编写一个数据库应用
时,由于在Form的Create事件中要打开好几个数据库,因此程序启动要
等待片刻,为此还要做一个启动画面,后来我就使用了OnIdle事件,在
Form的Create事件中并不打开数据库,而是在OnIdle事件中打开,这样
程序的启动大大加快,示范如下:
Procedure TForm1.OpenDataBase(Sender:TObject;Var Done:Boolean);
begin
try
  //Open DataBase;
finally
  Application.OnIdle:=Nil; 
//不管是否打开数据库,必须中止OnIdle事件
//否则由于各种原因导致数据库打不开数据库
//的话,将导致系统锁死。
end;
end;

Procedure TForm1.Create(Sender:TObject);
begin
Application.OnIdle:=OpenDataBase;
end;

转载于:https://www.cnblogs.com/maweiwei/p/7493614.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值