DELPHI有关延迟执行的问题

我有这样一个TTIMERedit1.text:=1--我想在这里加入延迟1秒--edit1.text:=2但是延迟不要用sleep我不想让程序死掉... 我有这样一个TTIMER
edit1.text:=1
--我想在这里加入延迟1秒--
edit1.text:=2

但是延迟不要用sleep我不想让程序死掉
展开
 我来答
匿名用户
2011-04-05
展开全部
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;
cst_zf
2011-04-05 · 超过10用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:11.7万
展开全部
你在Event里执行的话,不可能不死掉的,即使插入Application.ProcessMessages也会和正常的不一样,比如关闭应用程序关不掉。

一个办法是用第二个Timer,然后在第一个Timer的OnTimer事件里启动另一个Timer,然后edit1.text:=2在那里执行。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
在月光下撕纸
2011-04-05 · 超过12用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:16.3万
展开全部
没办法的
因为你这是在过程里面延时,用什么方法都会死掉

最好的办法是再加入一个Timer,然后跟cst_zf和Stevewh的方法一样

不过看样子你在做一个计时器什么的吧……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
撒康胜026
2011-04-05 · TA获得超过1693个赞
知道小有建树答主
回答量:147
采纳率:0%
帮助的人:37.1万
展开全部
加入一个Timer控件,设置时间间隔为1000
在Timer事件中编写:
edit1.text:=2
Timer.Enabled = false
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
临崖策马
2011-04-05 · 超过35用户采纳过TA的回答
知道答主
回答量:92
采纳率:0%
帮助的人:53.1万
展开全部
图方便用ttimer控件这个比较简单。
否则的话自己另起一个线程。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式