这个问题问的很多,但大多数最后是不了了之。
我目前这么做:
procedure a.Execute ;
begin
try
inherited;
FreeOnTerminate := true;
....//创建ado,tstringlist等
....//其他执行代码
end;destructor a.Destroy;
begin
//这里释放所有动态创建的内容,如ado,tstringlist等
inherited;
end;这样写是不是可以确保线程资源全部释放掉了?
我目前这么做:
procedure a.Execute ;
begin
try
inherited;
FreeOnTerminate := true;
....//创建ado,tstringlist等
....//其他执行代码
end;destructor a.Destroy;
begin
//这里释放所有动态创建的内容,如ado,tstringlist等
inherited;
end;这样写是不是可以确保线程资源全部释放掉了?
procedure a.Execute ;
begin
inherited;
FreeOnTerminate := true;
try
//创建ado,tstringlist等
//……
//其他执行代码
//……
finally
//这里释放所有动态创建的内容,如ado,tstringlist等
end;
end;
不可控的例子如Tdoscommand,线程控制一个外部命令行进程。。
th0:=findbt.Create(true); //标题线程
th0.Resume ;这样有可能线程挂起?然后我在execute设置属性就有可能出错?
那是不是应该在create设置属性就OK了?
th0:=findbt.Create(true); //标题线程
th0.Resume ;哪里有Resume之前就去访问你execute里才创建的对象?
findbt=class(TThread)//创建发现内容的线程
private
procedure getweb(var s,sdz,swz,swzlb,swzys:string);
function clearzy(var s:string):string;
function clearhtml(var s:string):string;
function _Get(var url,scookie:string) : String;
function clearjava(s:string):string;
function cutdate(slk:string):string;
protected
Procedure Execute;override;
procedure showlabel;
procedure showstop;
procedure showend;
destructor Destroy; override;
public
lab:tdxlabel;
errorflag:integer;
bzwz:string;//bzwz是标准网址的样式
adoxc,adobase:tadodataset;
resp : TStringlist;
linktp,zt,link:tstringlist;//获取链接的临时数据存放结构
aidhttp1:tidhttp;
btbase1,btbase2,btbase3,btbase4,btbase5,btbase6:tstringlist;//网址变量
end;BambooCaep,看看这样有何不妥?我现在对:
adoxc,adobase:tadodataset;
resp : TStringlist;
linktp,zt,link:tstringlist;//获取链接的临时数据存放结构
aidhttp1:tidhttp;
btbase1,btbase2,btbase3,btbase4,btbase5,btbase6:tstringlist;//网址变量全部在execute创建和释放,有很不妥呢?