您好,请教一个与线程相关的问题,谢谢您(20分)

  • 主题发起人 主题发起人 wjlsnet
  • 开始时间 开始时间
W

wjlsnet

Unregistered / Unconfirmed
GUEST, unregistred user!
您好,如果设置了 FreeOnTerminate = True 则在Execute中的代码执行完后系统将自动释放当前的Thread,
如果 FreeOnTerminate = False ,则 ExeCute 执行完后系统不自动释放线程对象
------------------------------------------------------------------------------
以下说法对吗 /

还有,如果 FreeOnTerminate = False ,则 ExeCute 执行完后线程对象处于什么状态 ?
 
处于等待释放的状态,也不可能再进入运行状态了

这时候需要你来进行释放,
可以读取保存在线程对象内部的数据和信息,
然后再释放它

不知道我说的对不对
 
if QueryThread=nil then exit;
if not QueryThread.Terminated then
begin
QueryThread.Terminate; { 销毁之前终止线程执行 }
// QueryThread.Destroy; //用Terminate终止线程时不要调用destroy,要用free
QueryThread.Free;
QueryThread:=nil;

end;
 
请继续指导

谢谢
 
FreeOnTerminate定义了,但是好像没有用到
那位大虾指点一下,FreeOnTerminate在哪里用到了,并释放了线程对象
 
同意LiChaoHui. FreeOnTerminate=True 意味着你Create线程并运行后就不用管它了,意味着主进程只需要Terminate, 不需要(最好也不要)显式调用Thread.Free来释放线程。
 
谢谢:0
如果 FreeOnTerminate = False ,则 ExeCute 执行完后系统不自动释放线程对象,需要手动
释放 。 但“也不可能再进入运行状态了” ,是不是这样 ?

看到有的线程在 Execute 最后加一个 Waitfor,(FreeOnTerminate = False) ,是不是还可以再
次执行 ?

谢谢您

 
FreeOnTerminate = True 的作用是及时清除线程对象所占用的资源。
而一般的,当Execute执行完了后,就认为线程结束了。他会自动清除线程对象所占用的栈。
他的执行如下:当Execute完成后,调用delphi标准函数:EndThread,而这个函数实际上
是调用了api函数:ExitThread()。有ExitThread来清除线程所占用的栈。使用
FreeOnTerminate = True 这个方法的好处是能及时的清除线程对象所占用的资源。提高
内存使用率!
 
多人接受答案了。
 
后退
顶部