首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

DELPHI有关延迟执行的有关问题

2012-09-11 
DELPHI有关延迟执行的问题procedure Delay(MSecs: Longint)//延时函数,MSecs单位为毫秒(千分之1秒)varFir

DELPHI有关延迟执行的问题
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在那里执行。

热点排行