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