このような簡単な質問をして申し訳ありません。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 のローカル コピーにアクセスし、問題は発生しないという結論に達しました。誰かがこれを確認できれば、質問を閉じることができます、ありがとう.