关于TThread的释放问题,求高人。
本帖最后由 twins7713 于 2013-01-11 15:09:47 编辑 本人学delphi不久,对TTHREAD实在理解不够深,总是在工程上的程序有错,这里就不拿原代码了,太多了不好观看,这里就做了个类似的例子,请大家看下
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TEX1=class(TThread)
protected
procedure Execute; override;
public
constructor create(CreateSuspended:Boolean;FOT:Boolean);//PODate:TList);
end;
TForm1 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
FEX1:TEX1;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TEX1 }
constructor TEX1.create(CreateSuspended, FOT: Boolean);
begin
inherited create(CreateSuspended);
FreeOnTerminate:=fot;
end;
procedure TEX1.Execute;
begin
ShowMessage('3');
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
if not Assigned(FEX1) then
begin
FEX1:=TEX1.Create(True,True);
ShowMessage('1');
FEX1.Resume
end
else
ShowMessage('2');
end;
end.
程序运行了,显示的先是‘1’ ,在是‘3’,这里是正确的,在点击BUTTON时,显示的就是‘2’。这里就不对了,既然现实了‘3’,说明已经执行完了,应该自动释放掉,为何这里没有,我想TThread已经释放掉了,但是句柄还在,为何会这样,求高人知道下。
[解决办法]
建议使用win api判断线程退出码 具体自己查一下
给你个大牛开的贴关于线程的 你可以参考一下
http://bbs.csdn.net/topics/360046056