多线程 – 简单线程示例Delphi

我在Delphi中使用这种线程的新功能。所以,我试图做一个简单的查询应用程序,调用数据库并花费一点时间,所以我想提醒用户有一个后台进程,必须耐心等待。

我尝试了很多样品,但没有一个为我工作,请,有人可以给我看一个可以工作的简单样品吗?

我知道我必须声明一个类型的TThread,创建和覆盖执行…等等,但由于我失去了…

使用Delphi 7,SQL Server 2005和ADO,Windows XP sp3.-

谢谢。

你可以在线程网上找到很多例子。唯一的特殊功能是,如果您在线程中使用ADO连接,则不能共享相同的连接。
每个线程必须创建自己的连接,否则它们是相等的(应遵循与其他线程相同的规则)。

我使用的一个示例是:

  TADOSQLThread = class(TThread)
  private
    FADOQ: TADOQuery;  // Internal query
    FSQL: string;      // SQL To execute
    FID: integer;      // Internal ID

  public
    constructor Create(CreateSuspended:Boolean; AConnString:String;
                       ASQL:string; IDThread:integer);
    destructor Destroy; override;
    procedure Execute(); override;

    property ID:integer read FID write FID;
    property SQL:string read FSQL write FSQL;
    property ADOQ:TADOQuery read FADOQ write FADOQ;
  end;

Create构造函数被覆盖,如下所示:

constructor TADOSQLThread.Create(CreateSuspended:Boolean; AConnString:String;
                                 ASQL:string; IDThread:integer);
begin

  inherited Create(CreateSuspended);

  // ini
  Self.FreeOnTerminate := False;

  // Create the Query
  FADOQ := TAdoquery.Create(nil);
  // assign connections
  FADOQ.ConnectionString := AConnString;
  FADOQ.SQL.Add(ASQL);
  Self.FID := IDThread;
  Self.FSQL:= ASQL;
end;

而执行方法很简单:

procedure TADOSQLThread.Execute();
begin

  inherited;

  try
    // Ejecutar la consulta
    Self.FADOQ.Open;
  except
    // Error al ejecutar
    ...Error treattement
  end;
end;

要启动和创建一个线程,您可以使用与此相似的代码:

  //crear el Thread
  th := TADOSQLThread.Create(True, mmConnection.Lines.Text, ASQL, AId);
  // internal for me (for controled the number of active threads and limete it)
  inc(numThreads);
  // evento finalizacion
  th.OnTerminate := TerminateThread;
  // Ejecutarlo
  th.Resume;

我已经创建了一个TerminateThread方法,当它们完成时接收线程的控制。与其他线程唯一不同的是连接问题。您必须在每个线程上创建一个新的连接,它不能与其他人共享相同的ADOConnections。
我希望这个例子对你有用。

问候

翻译自:https://stackoverflow.com/questions/3451138/simple-thread-sample-delphi

转载注明原文:多线程 – 简单线程示例Delphi