欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DELPHI有关延迟执行的问题  

程序员文章站 2022-06-13 09:33:44
...
procedure Delay(MSecs: Longint);   
//延时函数,MSecs单位为毫秒(千分之1秒)   
var  
  FirstTickCount, Now: Longint;   
begin  
  FirstTickCount := GetTickCount();   
  repeat  
    Application.ProcessMessages;   
    Now := GetTickCount();   
  until (Now - FirstTickCount >= MSecs) or (Now < FirstTickCount);   
end;   
edit1.text:=1
Delay(1000);
edit1.text:=2
经过自己加入程序的测试很糟糕!!!!系统占用资源超大!
表明这段代码不适用
下面这段代码才是最合适的Delay!
说实话Delay也并不是想象中的那么好~在Delay的时候 程序执行其他都不行的!
Delphi代码
procedure Delay(MSecs :Longint);   
var    
  Tick: DWord;   
  Event: THandle;   
begin  
  Event := CreateEvent(nil, False, False, nil);   
  try  
    Tick := GetTickCount + DWord(msecs);   
    while (msecs > 0) and (MsgWaitForMultipleObjects(1, Event, False, msecs, QS_ALLINPUT) <> WAIT_TIMEOUT) do  
    begin  
      Application.ProcessMessages;   
      msecs := Tick - GetTickcount;   
    end;   
  finally  
    CloseHandle(Event);   
  end;   
end;
________________________________________________________________________
你在Event里执行的话,不可能不死掉的,即使插入Application.ProcessMessages也会和正常的不一样,比如关闭应用程序关不掉。

一个办法是用第二个Timer,然后在第一个Timer的OnTimer事件里启动另一个Timer,然后edit1.text:=2在那里执行。