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;
那么,何时使用自动释放的线程,何时使用手动释放的线程呢
我的建议是:
如果这个线程运行时间很短或者能保证在系统退出前完成运行,则可以选择自动释放,因为它可以很快自动释放掉
如果这个线程运行贯穿系统运行整个期间,则要选择手动释放了
本文介绍了Delphi中线程管理的三种方式:自动停止后自动释放、手动停止后自动释放及手动释放,并探讨了它们的应用场景。
1万+

被折叠的 条评论
为什么被折叠?



