怎么样终止sleep函数?

nbucjb 2006-10-10 02:00:38
延时等待程序代码如下:
procedure TForm1.WaitUntilDocComplete;
//延时
begin
Screen.Cursor := crAppStart;
try
while WebBrowser1.Busy do
begin
Application.ProcessMessages;
Sleep(50);
end;

repeat
Application.ProcessMessages;
Sleep(50);
until WebBrowser1.ReadyState = 4;
finally
Screen.Cursor := crDefault;
Label2.Color := clLime;
end;
end;

在网速慢的情况下会等待很长时间,关闭窗口也无法退出循环,请问,在循环进行中如何才能退出?
...全文
462 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
spirit_sheng 2006-10-11
  • 打赏
  • 举报
回复
如下就可以了:
FUserClosed: Boolean;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FUserClosed := True;
end;

延时等待程序代码如下:
procedure TForm1.WaitUntilDocComplete;
//延时
begin
// Add by Spirit Sheng
FUserClosed := False;

Screen.Cursor := crAppStart;
try
while WebBrowser1.Busy do
begin
Application.ProcessMessages;
Sleep(50);
// Add by Spirit Sheng
if FUserClosed then Exit;
end;

repeat
Application.ProcessMessages;
Sleep(50);
// Add by Spirit Sheng
if FUserClosed then Exit;
until WebBrowser1.ReadyState = 4;
finally
Screen.Cursor := crDefault;
Label2.Color := clLime;
end;
end;
光明山人 2006-10-11
  • 打赏
  • 举报
回复
你得在收到关闭消息时设置标志,然后在循环里判断标记,是否跳出循环。
比如 while not closed and WebBrowser1.Busy do

另外,跟sleep没有关系,关键是循环条件,因为你的sleep值很低(50毫秒)。

如果有sleep比较长的情况,想要解决,可以用计时来代替:
time1 := GetTickCount;
while GetTickCount<time1+毫秒数 do
begin
Application.ProcessMessages;
sleep(比较小的数,甚至可以是0,只是让其它的线程先走);
end;

--
http://www.agui.googlepages.com
mailto: agui.cn@gmail.com
nbucjb 2006-10-10
  • 打赏
  • 举报
回复
大家能否提供直接关闭这个窗口进程的代码?
happyhong 2006-10-10
  • 打赏
  • 举报
回复
最好用线程来写
nbucjb 2006-10-10
  • 打赏
  • 举报
回复
while WebBrowser1.Busy do
until WebBrowser1.ReadyState = 4;
这些都是判断啊
我需要的是无需判断,就像关闭窗口那样,点一下按钮就关闭
hangzhou_hammer 2006-10-10
  • 打赏
  • 举报
回复
关闭进程 还不可以就重起
OO_is_just_P 2006-10-10
  • 打赏
  • 举报
回复
while Flag do
Application.ProcessMessages;


然后在定时器里面判断需要的时候设定flag=True;
luxuewei5214 2006-10-10
  • 打赏
  • 举报
回复
改用其他延时方式

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧