给出这个例子,我们如何确保线程实例已经被释放? Thread.FreeOnTerminate = true时线程实例会发生什么情况,并在Thread.OnTerminate事件中爆发?线程是否孤立,除非您处理异常并释放OnTerminate中的线程解释?
如果FreeOnTerminate = true并且在OnTerminate中抛出异常,线程会发生什么?
// Thread constructor
constructor TMyThread.Create(CreateSuspended: Boolean);
begin
inherited Create(CreateSuspended);
Self.FreeOnTerminate := True;
end;
// TMyThread OnTerminate event
procedure TMyThread.OnTerminate(Sender: TObject);
var o: TObject;
begin
o:=nil;
showmessage(o.classname); // guaranteed AV
end;
空指针上没有AV。销毁AV会在一个零指针上。事实上,Free对于nil指针来说是行之有效的,事实上它总是使用Free而不是直接使用Destroy。 – 2011-05-18 16:51:14
@majan - 的确如此。修正了。 – Vector 2011-05-19 01:51:30