[Delphi] Thread 用法

來源出處:http://kamilia1470.pixnet.net/blog/post/213455875-delphi-thread-%E7%94%A8%E6%B3%95

Delphi 執行緒(Thread) 用法

使用Thread 必須使用繼承

最基本的Thread 繼承Type 寫在下面方便下次要複製用

type
  TCustomThread = Class(TThread)
  private
  protected
    procedure Execute; override;
  public
    constructor Create(XXX:String);
    Destructor  Destroy;
  end;

{ TCustomThread }

constructor TCustomThread.Create(XXX:String);
begin
  inherited Create(False);
  FreeOnTerminate := True;
end;

destructor TCustomThread.Destroy;
begin
  inherited;
end;

procedure TCustomThread.Execute;
begin
  inherited;
end;

//使用該類別用法

  with TCustomThread.Create(‘test’) do begin //建立
    OnTerminate := ThreadOnTerminate;         //結束後觸發的副程式 //procedure TForm1.ThreadOnTerminate(Sender: TObject);
    Resume;                                                       //下Resume 才會執行Thread的Execute
  end;

[Delphi] 多執行緒和資料庫存取

來源出處:http://www.programmer-club.com.tw/ShowSameTitleN/delphi/6493.html

2002/3/16 上午 09:36:50
感謝你… *^_^*
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Db, DBTables;

type
  TTestThread = Class (TThread)
    private
     FQuery:TQuery;
     FEdit:TEdit;
    { Private declarations }
    protected
     Procedure Execute;Override;
    public
    { Public declarations }
     Constructor Create(ltb:TQuery;url:TEdit);
    end;

  TForm2 = class(TForm)
    DataSource1: TDataSource;
    Database1: TDatabase;
    Edit1: TEdit;
    Query1: TQuery;
    Session1: TSession;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    test1:TTestThread;
  end;

var
  Form2: TForm2;

implementation
uses unit1;

{$R *.DFM}

Constructor TTestThread.Create(ltb:TQuery;url:TEdit);
begin
  inherited Create(False);
  FQuery:=ltb;
  FEdit:=url;
  FreeOnTerminate:=True;
end;

Procedure TTestThread.Execute;
begin
  FreeOnTerminate:=True;

  with FQuery do
  begin
    FQuery.Close;
    FQuery.sql.Clear;
    FQuery.sql.add(‘select url from url’);
    FQuery.open;
  end;

  while not FQuery.Eof do
  begin
    Form2.Edit1.Text:=FQuery.fieldByName(‘URL’).AsString;
    FQuery.Next;
  end;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  test1:=TTestThread.Create(Form2.Query1,Form2.Edit1);
end;
end.