荣植华的专栏

问渠那得清如许,为有源头活水来

原创 Delphi中进行延时的4种方法收藏

 | 旧一篇: CodeGear RAD 2007 SP4 最新下载及破解

 1、挂起,不占CPU
sleep
2、不挂起,占cpu
procedure Delay(msecs:integer);
var
FirstTickCount:longint;
begin
FirstTickCount:=GetTickCount;
repeat
Application.ProcessMessages;
until ((GetTickCount-FirstTickCount) >= Longint(msecs));
end;
3、定时器
procedure timerfun(handle:Thandle;msg:word;identer:word;dwtime:longword);stdcall;
begin
showmessage('到点了');
killtimer(handle,identer);//关闭定时器
end;

//其中的identer是定时器的句柄
procedure TForm1.Button1Click(Sender: TObject);
var
identer:integer;
begin
   identer:=settimer(0,0,2000,@timerfun);
   if identer=0 then exit; //定时器没有创建成功。
end;
4、不占CPU不挂起
function TForm1.HaveSigned(MaxWaitTime: Cardinal): Boolean;
var   I:Integer;
var   WaitedTime:Cardinal;
begin
          WaitedTime:=0;
          while      (WaitedTime<MaxWaitTime)   do
          begin
                  SleepEx(100,False);
                  Inc(WaitedTime,100);
                  Application.ProcessMessages ;
          end
end;

发表于 @ 2008年06月05日 08:53:26|评论(loading...)|

 | 旧一篇: CodeGear RAD 2007 SP4 最新下载及破解

评论

#OneGip 发表于2008-06-05 11:44:35  IP: 222.129.31.*
hao
#forverlove 发表于2008-06-06 16:59:39  IP: 222.47.65.*
4:
这样应该是前两种的合并吧。
说不占CPU不挂起,太夸了吧。。

只是一种折衷的办法啦。
#napsoft 发表于2008-06-07 00:14:09  IP: 61.191.211.*
4:
这样应该是前两种的合并吧。
说不占CPU不挂起

如果去掉:
Application.ProcessMessages ;

想请教下结果是什么样子?
呵呵,最后我还是选择了定时器
#shaker 发表于2008-06-09 12:27:02  IP: 125.113.231.*
第4总超级不准时的!`
发表评论  


登录
Csdn Blog version 3.1a
Copyright © Rzh