简单说说Delphi中线程的释放

本文介绍了Delphi中线程管理的三种方式:自动停止后自动释放、手动停止后自动释放及手动释放,并探讨了它们的应用场景。


标签: delphiconstructor

2011-08-26 14:53 9202人阅读 评论(0) 收藏 举报

 分类:

Delphi编程25 

版权声明:本文为博主原创文章,未经博主允许不得转载。

线程的释放方式有两种:一种是线程在运行完成后自动释放,一种是手动释放。

无论是那种释放,都应该在线程停止后进行释放。

然而线程的停止也有两种情况:一种是不需要设置标志位,直接完成;一种是由于execute方法中做了循环,需要设置标志位才能停止。

如果线程已经停止并且自动释放,再去手动停止,就会报错。

下面看代码:

1、自动停止后自动释放的线程:

[delphi] view plain copy

1. constructor TTestThread.Create;  

2. begin  

3.   inherited Create( True );  

4.   FreeOnTerminate := True;  

5. end;  

6.   

7. procedure TTestThread.Execute;  

8. begin  

9.     ....//功能代码  

10.   

11.     //此方法完成后线程就已经停止了  

12.   

13. end;  

这种情况线程会自动释放,因此不要手动释放,否则会报错

2、手动停止后自动释放的线程:

[delphi] view plain copy

1. constructor TTestThread.Create;  

2. begin  

3.   inherited Create( True );  

4.   FreeOnTerminate := True;  

5. end;  

6.   

7. procedure TTestThread.Execute;  

8. begin  

9.   while not Terminated do //not Terminated do  

10.   begin  

11.     ....//功能代码  

12.   end;  

13. end;  

14.   

15. procedure Test  

16. begin  

17.     t1 := TTestThread.Create( Self );  

18.     t1.Terminate;  

19. end;  

3、手动释放的线程:

[delphi] view plain copy

1. constructor TTestThread.Create;  

2. begin  

3.   inherited Create( True );  

4. end;  

5.   

6. procedure TTestThread.Execute;  

7. begin  

8.   while not Terminated do //not Terminated do  

9.   begin  

10.     ....//功能代码  

11.   end;  

12. end;  

13.   

14. procedure Test  

15. begin  

16.     t1 := TTestThread.Create( Self );  

17.     t1.Terminate;  

18.     t1.WaitFor;  

19.     t1.Free;  

20. end;  

那么,何时使用自动释放的线程,何时使用手动释放的线程呢

我的建议是:

如果这个线程运行时间很短或者能保证在系统退出前完成运行,则可以选择自动释放,因为它可以很快自动释放掉

如果这个线程运行贯穿系统运行整个期间,则要选择手动释放了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值