首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2013-01-06 
一个线程已结束,为啥还能检测到?aaclass(TThread) 这样的方法创建了线程bb:aa在aa.Execute已设置FreeOnT

一个线程已结束,为啥还能检测到?
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.

热点排行