我想实现这样的动作,按button1创建一个从1到40000计数的线程;按button2结束该线程,此时如果在按button1,计数重新从1开始。
现在的问题是如果我连续按了两次button1,那么button2就不再有反应了。大家看看这是怎么回事吧。unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; lvThread = class(TThread)
private
btn11:tbutton;
protected
public
constructor Create(btn1:tbutton);
procedure Execute; override;
end;var
Form1: TForm1;
ma:lvthread;implementation{$R *.dfm}{ lvThread }constructor lvThread.Create(btn1: tbutton);
begin
btn11:=btn1;
FreeOnTerminate:=true;
inherited Create(true);
end;procedure lvThread.Execute;
var
i:integer;
begin
i:=0;
repeat
i:=i+1;
btn11.Caption:=inttostr(i);
until (i=40000) or (terminated);
terminate;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
ma:=lvthread.Create(button1);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
ma:=lvthread.Create(button1);
if ma.Suspended=true then ma.Resume;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
ma.Terminate;
end;end.
现在的问题是如果我连续按了两次button1,那么button2就不再有反应了。大家看看这是怎么回事吧。unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; lvThread = class(TThread)
private
btn11:tbutton;
protected
public
constructor Create(btn1:tbutton);
procedure Execute; override;
end;var
Form1: TForm1;
ma:lvthread;implementation{$R *.dfm}{ lvThread }constructor lvThread.Create(btn1: tbutton);
begin
btn11:=btn1;
FreeOnTerminate:=true;
inherited Create(true);
end;procedure lvThread.Execute;
var
i:integer;
begin
i:=0;
repeat
i:=i+1;
btn11.Caption:=inttostr(i);
until (i=40000) or (terminated);
terminate;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
ma:=lvthread.Create(button1);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
ma:=lvthread.Create(button1);
if ma.Suspended=true then ma.Resume;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
ma.Terminate;
end;end.
procedure TForm1.Button1Click(Sender: TObject);
begin
if not Assigned(ma) then
ma:=lvthread.Create(button1);
if ma.Suspended=true then ma.Resume;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ma.Terminate;
FreeAndNil(ma);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Assigned(ma) then
Button2Click(self);
ma:=lvthread.Create(button1);
if ma.Suspended=true then ma.Resume;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Assigned(ma) then Button2Click(self);
if assigned(ma) then showmessage('');//上面不是terminate了,怎么还有assigned(ma)=true?
ma:=lvthread.Create(button1);
if ma.Suspended=true then ma.Resume;
end;
看这个.http://community.csdn.net/Expert/topic/3800/3800890.xml?temp=.1071894