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在那里执行。
//延时函数,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在那里执行。