gpt4 book ai didi

multithreading - 如果 FreeOnTerminate=true 并且在 OnTerminate 中抛出异常,线程会发生什么情况?

转载 作者:行者123 更新时间:2023-12-03 18:11:21 24 4
gpt4 key购买 nike

给定这个例子,我们如何确保线程实例已被释放?当 Thread.FreeOnTerminate=true 并且您在 Thread.OnTerminate 事件中爆炸时,线程实例会发生什么情况?除非您处理异常并在 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;

最佳答案

您应该在 OnTerminate 处理程序中处理所有异常,因为未处理的异常将导致线程实例不会被释放(参见 Classes.ThreadProc 实现)。只需将处理程序的主体包含在 try..except 中并处理所有异常。

但是您的“保证 AV”示例是错误的:如果实例为 nil,Free 不会导致 AV。

关于multithreading - 如果 FreeOnTerminate=true 并且在 OnTerminate 中抛出异常,线程会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6047874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com