大悟还俗

邮箱 key_ok@qq.com 我的收集 http://pan.baidu.com/share/home?uk=1177427271
posts - 236, comments - 8, trackbacks - 0, articles - 0
  新随笔  :: 联系 :: 订阅 订阅  :: 管理

线程【五】VCL下的线程类

Posted on 2013-10-09 13:01 大悟还俗 阅读(...) 评论(...) 编辑 收藏

在这里把网友常常搞不清楚的属性作用列出来:

一、FreeOnTerminate
用于表明线程执行完毕后是自动释放还是保留,默认为False

二、Terminate

该过程只是简单地设置线程类的Terminated标志,并不是真正的释放,这一点要格外注意

三、Synchronize

该函数是同步方法,如果线程中有操作UI的语句时,需要把UI操作写成过程(无参数过程),放到该方法中!

 

 

//这段代码是要用线程打印1-99,输出至Memo1中
TThread1 = class(TThread)
  private
    FNum: Integer;
    procedure AddLines;
  protected
    procedure Execute; override;
  end;

procedure TThread1.LinesAdd();
begin
  Form1.mmo1.Lines.add(IntToStr(FNum));//把操作UI类写成一个过程,注意,该过程不能有参数,不过可以把参数写成线程类的成员变量
end;

procedure TThread1.Execute;
var
  i: Integer;
begin
  FreeOnTerminate := True;
  for i := 0 to 99 do
  begin
    if Terminated then break;
    FNum:= i;
    Synchronize(AddLines);//不能有参数
  end;
end;
View Code