如果创建的线程指定Onterminate:=SomeFunction后,线程什么时候释放?SomeFunction执行完毕后释放吗?? 50

 我来答
匿名用户
2017-01-12
展开全部
局部变量FreeThread记录了线程类的FreeOnTerminated属性的设置,然后将线程返回值设置为线程类的返回值属性的值。然后执行线程类的DoTerminate方法。
DoTerminate方法的代码如下:

procedure TThread.DoTerminate;
begin
if Assigned(FOnTerminate) then Synchronize(CallOnTerminate);
end;

很简单,就是通过Synchronize来调用CallOnTerminate方法,而CallOnTerminate方法的代码如下,就是简单地调用OnTerminate事件:

procedure TThread.CallOnTerminate;
begin
if Assigned(FOnTerminate) then FOnTerminate(Self);
end;

因为OnTerminate事件是在Synchronize中执行的,所以本质上它并不是线程代码,而是主线程代码(具体见后面对Synchronize的分析)。
执行完OnTerminate后,将线程类的FFinished标志设置为True。
接下来执行SignalSyncEvent过程,其代码如下:

procedure SignalSyncEvent;
begin
SetEvent(SyncEvent);
end;
ayi033
2017-01-11 · TA获得超过144个赞
知道小有建树答主
回答量:317
采纳率:100%
帮助的人:105万
展开全部
那个时候线程已经结束了,只是类还存在;
来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式