zoukankan      html  css  js  c++  java
  • 简单说说Delphi中线程的释放

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

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

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

  • 相关阅读:
    get 方式获取ajax
    javascript 面试题目
    原生js 制作选项卡切换效果
    js 回到顶部效果
    php mysql
    浏览器高度 clientHeight 与scrollHeight offsetHeight
    js dom中删除子节点removeChild
    Javascript综合笔记
    Ka贪心大暴走
    Openjudge NOI题库 ch0111/t1794 集合加法
  • 原文地址:https://www.cnblogs.com/findumars/p/7230750.html
Copyright © 2011-2022 走看看