給出這個例子,我們如何確保線程實例已經被釋放? 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