Delphi多线程退出的问题!高手帮帮忙!
procedureTForm1.Button2Click(Sender:TObject);beginiftrim(Edit2.Text)<>''thenMemo1.Lin...
procedure TForm1.Button2Click(Sender: TObject);
begin
if trim(Edit2.Text)<>'' then
Memo1.Lines.Add(trim(Edit2.Text));
end;
procedure TForm1.TScanClick(Sender: TObject);
var
i: integer;
Sum:integer;
begin
if TScan.Caption ='线程扫描' then
begin
bool :=true;
TScan.Caption :='停止扫描';
end
else
begin
bool := False;
TScan.Caption :='线程扫描';
end;
// if bool then
begin
Memo3.Clear;
Memo2.Clear; //清空路径列表中的数据
Form1.Sta.Panels.Items[1].Text := '程序已经开始扫描,请耐心等待扫描结束';
n :=0;
Sum :=Memo1.lines.count; //计算需要检测页面总数
SetLength(Thread1,Sum); // 动态设置线程的数量
ProgressBar1.Min :=0; //设置进度栏默认为0
ProgressBar1.Max :=sum;
ProgressBar1.Step :=1;
ProgressBar1.Position :=0;
for i := 0 to Sum - 1 do //判断是否循环检测所有页面
begin
if not bool then
begin
break;//退出循环
exit;
end;
Thread1[i] := T1.Create(Memo1,Memo2,Memo3,i);
Thread1[i].OnTerminate := ThreadExit; //退出线程
//ProgressBar1.StepIt;
//sleep(30);
end;
end;
bool := False; // 关闭开关
end;
我的思路就是让他跳出循环,但好像条件不行一直都无法跳出循环也就无法停止线程! 希望高手帮我看看用什么条件让他停下来 ,这个是扫描按钮的。。
if TScan.Caption ='线程扫描' then
begin
Thread1[i] := T1.Create(Memo1,Memo2,Memo3,i);
Thread1[i].OnTerminate := ThreadExit; //退出线程
Form1.Sta.Panels.Items[1].Text := '程序扫描已经停止,请耐心所有线程退出';
break;//退出循环
end;
Thread1[i] := T1.Create(Memo1,Memo2,Memo3,i);
Thread1[i].OnTerminate := ThreadExit; //退出线程
//ProgressBar1.StepIt;
//sleep(30);
end;
end;
bool := False; // 关闭开关
end;
看了楼下朋友的解释 修正了一下,但还有一点毛病 就是退出线程后还有两个线程在运行 并出现两条扫描结果…… 展开
begin
if trim(Edit2.Text)<>'' then
Memo1.Lines.Add(trim(Edit2.Text));
end;
procedure TForm1.TScanClick(Sender: TObject);
var
i: integer;
Sum:integer;
begin
if TScan.Caption ='线程扫描' then
begin
bool :=true;
TScan.Caption :='停止扫描';
end
else
begin
bool := False;
TScan.Caption :='线程扫描';
end;
// if bool then
begin
Memo3.Clear;
Memo2.Clear; //清空路径列表中的数据
Form1.Sta.Panels.Items[1].Text := '程序已经开始扫描,请耐心等待扫描结束';
n :=0;
Sum :=Memo1.lines.count; //计算需要检测页面总数
SetLength(Thread1,Sum); // 动态设置线程的数量
ProgressBar1.Min :=0; //设置进度栏默认为0
ProgressBar1.Max :=sum;
ProgressBar1.Step :=1;
ProgressBar1.Position :=0;
for i := 0 to Sum - 1 do //判断是否循环检测所有页面
begin
if not bool then
begin
break;//退出循环
exit;
end;
Thread1[i] := T1.Create(Memo1,Memo2,Memo3,i);
Thread1[i].OnTerminate := ThreadExit; //退出线程
//ProgressBar1.StepIt;
//sleep(30);
end;
end;
bool := False; // 关闭开关
end;
我的思路就是让他跳出循环,但好像条件不行一直都无法跳出循环也就无法停止线程! 希望高手帮我看看用什么条件让他停下来 ,这个是扫描按钮的。。
if TScan.Caption ='线程扫描' then
begin
Thread1[i] := T1.Create(Memo1,Memo2,Memo3,i);
Thread1[i].OnTerminate := ThreadExit; //退出线程
Form1.Sta.Panels.Items[1].Text := '程序扫描已经停止,请耐心所有线程退出';
break;//退出循环
end;
Thread1[i] := T1.Create(Memo1,Memo2,Memo3,i);
Thread1[i].OnTerminate := ThreadExit; //退出线程
//ProgressBar1.StepIt;
//sleep(30);
end;
end;
bool := False; // 关闭开关
end;
看了楼下朋友的解释 修正了一下,但还有一点毛病 就是退出线程后还有两个线程在运行 并出现两条扫描结果…… 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询