天天看點

TThread,Delphi線程

TThread類   Thread類是Delphi語言提供的線程類,該線程類可以完成大多數的線程操作

TThread類的屬性   

 1.(1)FreeOnTerminate屬性      

 當線程終止時是否自動删除線程對象.預設值為True;  文法:property FreeOnTerminate: Boolean;   

2 Priority屬性      指定線程的優先級.   property Priority: TTreadPriority;      

3 ReturnValue屬性       線程終止時,用該屬性為其他線程傳遞一個傳回值.   

 4 Suspended屬性      指定線程是否處于挂起狀态   

 5 Terminated       線程運作晨,如果将屬性為True時,線程終止  

 6 ThreadID屬性      線程的惟一辨別   

7 Handle屬性      線程句柄    

TThread類方法    

 DoTerminate: 調用線程對象DoTerminate方法可以觸發線程的OnTerminate事件    

 Execute:線程的執行部分都寫在該有方法中.必須實作的    

 Resume:當線程對象處于暫停狀态時,調用此方法可以恢複線程運作   

  Suspend:暫停線程    

 Synchronize:線程同步    

 Terminate:終止線程    

 WaitFor:等待線程對象的終止,并傳回線程對象的ReturnValue屬性值   

unit Unit2;

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, ComCtrls;

type

  TMyThread = class(TThread)

   protected

      procedure Run();

      procedure Execute;override;

  end;

  TfrmDemo = class(TForm)

    ProgressBar1: TProgressBar;

    Button1: TButton;

    Button2: TButton;

    Label1: TLabel;

    procedure Button1Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure Button2Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  frmDemo: TfrmDemo;

implementation

{$R *.dfm}

{ TMyThread }

procedure TMyThread.Execute;

begin

  inherited;

  //線程同步

  Synchronize(Run);

end;

procedure TMyThread.Run;

var

  I: Integer;

begin  

  with frmDemo do 

  begin 

     for I := 0 to ProgressBar1.Max do

    begin 

     Label1.Caption := '工作線程運作中';

     ProgressBar1.Position := i;

     Application.ProcessMessages;  

    end;

  end;

end;

procedure TfrmDemo.Button1Click(Sender: TObject);

var

  I: Integer;

begin

  for I := 0 to ProgressBar1.Max do

  begin 

     Label1.Caption := '主線程運作中';

     ProgressBar1.Position := i;

     Application.ProcessMessages;

  end;

end;

procedure TfrmDemo.Button2Click(Sender: TObject);

var 

  MyThread: TMyThread;

begin

  MyThread := TMyThread.Create(false);  

end;

procedure TfrmDemo.FormCreate(Sender: TObject);

begin

  progressbar1.Max := 1000000;

end;

end.

繼續閱讀