• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

简单说说Delphi中线程的释放

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

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

然而线程的停止也有两种情况:一种是不需要设置标志位,直接完成;一种是由于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;  

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

我的建议是:

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

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

 

http://blog.csdn.net/youthon/article/details/6721692


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
DelphiTStream,TMemoryStream,TFileStream等详细介绍发布时间:2022-07-18
下一篇:
Delphi中StrToIntDef函数的应用发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap