public
Procedure getcount;
Procedure execute; override;
End;
Var
Form1 : TForm1;
count : integer;
Implementation
{$R *.dfm}
{ TTestThread }
Procedure TTestThread.execute;
Var
i : integer;
Begin
Inherited;
FreeOnTerminate := true;
For i := 1 To 10000 Do
Begin
If Terminated Then
break;
inc(count);
End;
End;
Procedure TTestThread.getcount;
Begin
End;
Procedure TForm1.Button1Click(Sender: TObject);
Var
i : integer;
Begin
Try
For i := 1 To 100 Do
Begin
threadlist.Add(TtestThread.Create(false));
sleep(100);
ListBox1.Items.Add(inttostr(count));
End
Except
showmessage('erro');
End
End;
Procedure TForm1.FormCreate(Sender: TObject);
Begin
threadlist := TList.Create;
End;
一般情况下,利用将FreeOnTerminate的属性设为True的方法来及时清除线程对象是最方便的办法,这只需要在Excute()退出前设置就行了。
设置方法如下:
Procedure TTestThread.execute;
Var
i : integer;
Begin
Inherited;
FreeOnTerminate:=true;
For i := 1 To 10000000 Do
Begin
if Terminated then break;
inc(count);
Synchronize(getcount);
End;
End;