有关在线程中延时的问题 ( 积分: 50 )

  • 主题发起人 主题发起人 hejian_2002
  • 开始时间 开始时间
H

hejian_2002

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在需要在线程中延时,我是这样实现的
procedure DelayTimeDT(msecs:Dword);
var
TT:Dword;
begin
TT:=GetTickCount;
while (getTickCount-TT<msecs) and (not m_AppEnd)do
begin
//application.ProcessMessages;//防止死锁,不用这个是因为CPU占用100%
application.HandleMessage;
end;
end;
现在有这样一个问题,就是我如果打开了其它的窗口,在延时过程中,不能关闭,但是其它功能又能执行,我现在想如何能顺利地关闭其它的窗口.
 
我现在需要在线程中延时,我是这样实现的
procedure DelayTimeDT(msecs:Dword);
var
TT:Dword;
begin
TT:=GetTickCount;
while (getTickCount-TT<msecs) and (not m_AppEnd)do
begin
//application.ProcessMessages;//防止死锁,不用这个是因为CPU占用100%
application.HandleMessage;
end;
end;
现在有这样一个问题,就是我如果打开了其它的窗口,在延时过程中,不能关闭,但是其它功能又能执行,我现在想如何能顺利地关闭其它的窗口.
 
用得着这样麻烦吗?用Sleep就是了:
Sleep(msecs);
 
可以自己定义一个Delay啊
用sleep不好吧
给段代码给你,其实和你的差不多
procedure Delay(MSeconds: Longint);
var
FirstTickCount, Now: Longint;
begin
FirstTickCount := GetTickCount;
repeat
Application.ProcessMessages;
Now := GetTickCount;
until (Now - FirstTickCount >= MSeconds) or (Now < FirstTickCount);
end;
 
sleep基本上可以到1ms,不过考虑到线程的切换.应该说在几ms是很精确的.并且你可以提高此线程的优先级.
 
当sleep(5000)期间,用户关闭整个程序,那么线程会发生什么事?
 
用sleep好了,在线程内不需要用application.process...处理消息,
 
后退
顶部