一个正在运行的循环如何让它停下来?(50分)

  • 主题发起人 主题发起人 SP229
  • 开始时间 开始时间
S

SP229

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TFrmYC.bsSkinSpeedButton1Click(Sender: TObject);
var
j: integer;
st: tstrings;
TT,TT1: string;
begin
st:=TstringList.Create;
TT:=25 24 26;
for j := 1 to 1000000 do
begin
st.Clear;
st.AddStrings(MLKJ);

TT1:=GetDSBSDX(ST.Strings[6],cbLX.Text)+TT1;
if Length(TT1)>L then
TT1:=Copy(TT1,1,L);
IF J>strtoint(cbQS.Text) then
begin
if TT1=TT then
break;
end;
end;
...............
st.free;
end;
我想在窗体上加一个按纽,能随时可让它停下来.
 
var
stop: boolean;
.........
procedure TFrmYC.bsSkinSpeedButton1Click(Sender: TObject);
var
j: integer;
st: tstrings;
TT,TT1: string;
begin
st:=TstringList.Create;
TT:=25 24 26;
for j := 1 to 1000000 do
begin
Application.ProcessMessages;
if Stop then
begin
Stop:=false;
break;
end;
st.Clear;
st.AddStrings(MLKJ);

TT1:=GetDSBSDX(ST.Strings[6],cbLX.Text)+TT1;
if Length(TT1)>L then
TT1:=Copy(TT1,1,L);
IF J>strtoint(cbQS.Text) then
begin
if TT1=TT then
break;
end;
end;
...............
st.free;
end;

procedure TFrmYC.bsSkinSpeedButton2Click(Sender: TObject);
begin
Stop:=true;
end;
 
将这个循环放到TThread线程中去执行,之后就可以在主窗口中控制TThread的执行和退出线程。
 
去试一下,等一会给你加分
 
如果有中途暂停或者停止的需求,最好是放到线程里。好控制,
 
to sunnyfairy
我刚学,不懂.能否贴一段代码?
 
TMyThread = class(TThread)
public
procedure Execute; override;
end;

var
Form1: TForm1;
i:Integer;
MyThread:TMyThread;

implementation

{$R *.dfm}


{ TMyThread }
// 将循环放到线程中执行。
procedure TMyThread.Execute;
begin
for i := 0 to 1000000000 do
begin
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
// 创建执行线程
MyThread := TMyThread.Create(FALSE);
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if (CheckBox1.Checked) and (i < 1000000000) then
MyThread.Suspend // 暂停线程的执行。
else
MyThread.Resume; // 恢复线程的执行。
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
MyThread.Terminate; // 终止线程执行。
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
ShowMessage(IntToStr(i)); // 显示线程执行了多少次。
end;
 
非常感谢各位
 
后退
顶部