在OTL Async / Await Thread中使用局部变量是否安全?

时间:2015-08-27 08:41:40

标签: delphi omnithreadlibrary

我很抱歉提出这么简单的问题。这是我第一次在VCL中使用后台线程。所以我想知道在Async部分中使用局部变量是否安全?

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;

假设我执行此方法三次,而没有完成第一个线程。这会导致问题吗?

你会建议另一种解决这个问题的方法吗? (使用后台线程查询数据库,将结果附加到VCL数据集中。)

感谢。

编辑:我已经检查了问题13348970的答案,我的问题被标记为副本。我得出结论,如果我的方法被调用3次,所有3个ds局部变量将指向不同的内存地址,因此每个线程将访问其TOracleDataSet的本地副本,并且不会有任何问题。如果有人可以确认这一点我可以关闭这个问题,谢谢。

0 个答案:

没有答案