读书人

一个线程已终结为啥还能检测到

发布时间: 2013-01-06 15:44:48 作者: rapoo

一个线程已结束,为啥还能检测到?
aa=class(TThread) 这样的方法创建了线程

bb:aa;

在aa.Execute
已设置FreeOnTerminate := true;
线程也顺利结束

但是在主程序检测if bb=nil then 的时候为啥不是空?
[解决办法]

引用:
那如何把11号也给抹掉呢?

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.

读书人网 >.NET

热点推荐