1

このような簡単な質問をして申し訳ありません。VCL でバックグラウンド スレッドを使用するのはこれが初めてです。だから、非同期部分でローカル変数を使用しても安全かどうか疑問に思っていましたか?

procedure Tfrm1.ThreadedFillDataset;
var
  ds : TOracleDataSet;
begin

  lblThread.Caption := 'Thread start';
  Async(
    procedure
    begin
      // executed in background thread
      //Sleep(3000);
      ds := TOracleDataSet.Create(Self);
      //SetVariables 
      ds.Open;
    end)
  .Await(
    procedure
    begin
      ds.First;
      while not ds.Eof do
      begin
        //Fill design time dataset on form
        ds.Next;
      end;
        ds.Free;
        lblThread.Caption := 'Thread finished';

    end);
end;

最初のスレッドが完了せずに、このメソッドを 3 回実行するとします。これは問題につながるでしょうか?

この問題に対する別のアプローチを提案していただけますか? (バックグラウンド スレッドを使用してデータベースにクエリを実行し、結果を VCL データセットに追加します。)

ありがとう。

編集:質問13348970への回答を調べましたが、私の質問は重複としてマークされていました。メソッドが 3 回呼び出された場合、3 つdsのローカル変数はすべて別のメモリ アドレスを指すため、各スレッドは TOracleDataSet のローカル コピーにアクセスし、問題は発生しないという結論に達しました。誰かがこれを確認できれば、質問を閉じることができます、ありがとう.

4

0 に答える 0