procedure TForm1.Button1Click(Sender: TObject); //开始
begin
thread:=bb.Create(false);
end;procedure TForm1.Button2Click(Sender: TObject); //停止
begin
thread.Free;
thread.Terminate
end;
我在完成第第三个步聚时按停止操作时,线程能完全停止,而是在从步聚一按停止时,线程并没有完成停止,而是再再执行下一步聚才能完全停止;请问如何解决。
下面是线程的内容:
procedure bb.Execute;
var
i:integer;
begin
i:=0;
while not Terminated do
begin
form1.Memo1.Lines.Add('1:'+inttostr(i)); //步聚一
i:=i+1;
if terminated=true then exit;
sleep(5000); form1.Memo1.Lines.Add('2:'+inttostr(i)); //步聚二
i:=i+1;
if terminated=true then exit;
sleep(3000); form1.Memo1.Lines.Add('3:'+inttostr(i)); //步聚三
i:=i+1;
if terminated=true then exit;
sleep(3000) end;
end;
begin
thread:=bb.Create(false);
end;procedure TForm1.Button2Click(Sender: TObject); //停止
begin
thread.Free;
thread.Terminate
end;
我在完成第第三个步聚时按停止操作时,线程能完全停止,而是在从步聚一按停止时,线程并没有完成停止,而是再再执行下一步聚才能完全停止;请问如何解决。
下面是线程的内容:
procedure bb.Execute;
var
i:integer;
begin
i:=0;
while not Terminated do
begin
form1.Memo1.Lines.Add('1:'+inttostr(i)); //步聚一
i:=i+1;
if terminated=true then exit;
sleep(5000); form1.Memo1.Lines.Add('2:'+inttostr(i)); //步聚二
i:=i+1;
if terminated=true then exit;
sleep(3000); form1.Memo1.Lines.Add('3:'+inttostr(i)); //步聚三
i:=i+1;
if terminated=true then exit;
sleep(3000) end;
end;
解决方案 »
- [急]Delphi中如何将字符串(含变量)变成可用的公式?
- 以前有一本delphi的chm电子书,出了好几期,好像有11M 23M 之多,
- 看多线程的书,有些问题不懂,各位大哥指点下啊。。。。
- SQL语句问题
- 用Edit.text显示Driver
- 请问将现有exe程序修改为dll扩展名后,在delphi中通过什么代码让期执行?
- 有一段短程序,delphi6,7,都不行,delphi5行得通,代码不难,各位发表一下意见
- 我想编一个五子棋游戏,但不知delphi有没有控件数组,帮帮忙吧
- 知道什么是心跳马
- 请问关于Edit的设置问题!
- 实现像QQ那样的窗口停靠,鼠标的指又弹出来了
- 调用数据放到哪个事件中好呢?
2. 在步骤一附件点击,实际上if terminated=true then exit;已经执行,这里terminated = false,执行sleep函数, sleep执行完成后,terminated = true,继续执行步骤二,执行到if terminated=true 判断时,条件成立,退出
3. 直接在步骤三执行时,terminated在sleep(3000)完成后被设置成true,然后进行while判断,while条件判断不成立,循环结束。
你在步聚三 按停止操作时,接下来程序会继续循环从而就会执行while not Terminated do 到这里就会退出(因为你停止操作就是把Terminated 置为真)。你在步聚一 按停止操作时,接下来会执行步骤二,三。在这之后才会检测线程是否退出条件while not Terminated do 这也就是你上面说的那种情况。
要实现你说的:
procedure bb.Execute;
var
i:integer;
begin
i:=0;
while not Terminated do
begin
form1.Memo1.Lines.Add('1:'+inttostr(i)); //步聚一
i:=i+1;
if terminated=true then exit;
sleep(5000);
if Terminated then Exit; //不断的检测
form1.Memo1.Lines.Add('2:'+inttostr(i)); //步聚二
i:=i+1;
if terminated=true then exit;
sleep(3000);
if Terminated then Exit; //不断的检测
form1.Memo1.Lines.Add('3:'+inttostr(i)); //步聚三
i:=i+1;
if terminated=true then exit;
sleep(3000) end;
end;
需要检测Terminated的状态