Vec*_*tor 2 delphi multithreading
在这个例子中,我们如何确保线程实例已被释放?当Thread.FreeOnTerminate = true并且你在Thread.OnTerminate事件中爆炸时,线程实例会发生什么?线程是否是孤立的,除非你处理异常并在OnTerminate中释放线程explicitey?
// 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;
Run Code Online (Sandbox Code Playgroud)
您应该处理OnTerminate处理程序中的所有异常,因为未处理的异常将导致不释放线程的实例(请参阅Classes.ThreadProc实现).只需将处理程序的主体包含在try..中,except并处理所有异常.
但是你的'保证AV'的例子是错误的:Free如果实例是零,则不会导致AV.
| 归档时间: |
|
| 查看次数: |
1537 次 |
| 最近记录: |