我很抱歉问了这么简单的问题。这是我第一次在 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 的本地副本,不会有任何问题。如果有人可以确认这一点,我可以关闭问题,谢谢。