5

私は TThread の子孫を作成して、長期にわたる DB 操作を行うことに慣れています。私の通常の構成は次のようになります。

interface
type
  TMyDBOp = class(TThread)
  private
    FConnection: TADOConnection;
    FCommand1: TADOCommand;
    FCommand2: TADOCommand; // and many more privated objects, vars ...
    procedure InitDB;
    procedure DoneDB;
    procedure DoDBStuff; // and many more procedures and functions to structure the code
  protected
    procedure Execute; override;
  public
    constructor Create; reintroduce;
    property X: T... // and many more properties to set on thread creation
  end;

implementation

constructor TMyDBOp.Create;
begin
  inherited Create(False);
end;

procedure TMyDBOp.InitDB;
begin
  FConnection:= TADOConnection.Create(nil);
  // setup all connection props, setup all other components
end;

procedure TMyDBOp.DoneDb;
begin
  FConnection.Close; // and Free, and Free all other components
end;

procedure TMyDBOp.DoDBStuff;
begin
  // Execute FCommands, do some calculations, call other TMyDBOp methods etc. etc.
end;

procedure TMyDBOp.Execute;
begin
  Try
    Coinitialize;
    InitDB;
    try
      DoDBStuff;
    finally
      DoneDB;
    End;
  Except
    // catch, log, report exceptions ....
  End;
end;

次に、明らかにこのクラスを

var
  DBOp: TMyDBOp;
begin
  DBOp:= TMyDBOp.Create;
  DBOp.Property1:= xyz; // and set all other props
  DBOp.OnTerminate:= DBOpTerminated; // procedure to catch the thread and read back the results etc. etc.
  DBOp.Resume;
end;

そしてもちろん、私は通常 DBOp を別のコンポーネント var として設定して、スレッドを終了または待機できるようにします。

ここで、これらの TThread クラスを書き直して、OmniThreadLibrary で同様の構造を使用したいと考えています。どうすればいいですか?つまり、すべてのクラス コンポーネントとプロパティを定義するために使用する基本クラスは何ですか? - TOmniWorker の子孫である必要がありますか? では、Execute プロシージャはどこにありますか? - TObject の子孫である必要があり、OTLTaks は として作成されCreateTask(DBOp.Execute)ますか? - として作成された OTLTask のパラメータとして渡すのは TObject である必要がありCreateTask(anonymous method that reads the parameter and calls its Execute)ますか?

ヒントをありがとう。

編集: (明確化に関する gabrs のコメントに基づく)私のポイントは、OTL ソースのすべてのサンプル/テストは単純な使用法のみを示しているということです。基本的な「1 手順」のスレッドがほとんどです。私の場合、すべてスレッドで実行されるサブコンポーネントとサブルーチンを含むかなり複雑なクラスが必要です。そのようなクラスの祖先とそのデザインパターンを探しています。

4

0 に答える 0