一个线程已结束,为啥还能检测到?
aa=class(TThread) 这样的方法创建了线程
bb:aa;
在aa.Execute
已设置FreeOnTerminate := true;
线程也顺利结束
但是在主程序检测if bb=nil then 的时候为啥不是空?
[解决办法]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
ta = class(TThread)
instance: PDWORD;
procedure Execute; override;
destructor Destroy; override;
end;
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
a: Ta;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ ta }
procedure ta.Execute;
begin
inherited;
FreeOnTerminate := True;
end;
destructor ta.Destroy;
var
p: PDWORD;
begin
p := instance;
inherited;
p^ := 0//置线程实例变量为nil
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
a := Ta.Create(True);
a.instance := @a;//保存线程实例变量的地址
a.Resume;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if a = nil then ShowMessage('');
end;
end.