- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定这个例子,我们如何确保线程实例已被释放?当 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/
几年前,我决定永远不再仅仅依赖于设置线程的 FreeOnTerminate属性设置为 true 以确保其被销毁,因为我在应用程序终止时发现并推理了两件事: 它会产生内存泄漏,并且 程序终止后,该线程仍
我正在尝试实现以下目标(使用 Delphi7):登录到我的程序后,用户获得了控制权,但在后台,一个单独的线程从 Internet 下载一个文件,以检查当前的许可证 key 是否被列入黑名单。如果是,用
当 FreeOnTerminate = True 时,为 TThread 后代编写 Delphi DUnit 测试的最佳方法是什么? TThread 后代返回一个我需要测试的引用,但我不知道如何等待线
背景 使用 TThread.CreateANonymousThread(aProc:TProc)我可以创建一个线程,在线程终止后销毁线程对象。 (或者将 FreeOnTerminate 设置为 tru
给定这个例子,我们如何确保线程实例已被释放?当 Thread.FreeOnTerminate=true 并且您在 Thread.OnTerminate 事件中爆炸时,线程实例会发生什么情况?除非您处理
所以我创建了一个类:TWorkerThread = class(TThread) .在TWorkerThread我设置的构造函数 FreeOnTerminate := True . 然后我添加了一个私
我是一名优秀的程序员,十分优秀!