相关疑难解决方法(0)

传递值以同步线程

我是新手,所以我已经尝试了几个小时(我正在使用XE4),

我有一个简单的线程

type
  TSendThread = class(TThread)
  private
  public
    procedure proc(const s : string);
  protected
    procedure Execute; override;
  end;

  procedure TSendThread.proc(const S: String);
  begin
    showmessage(s);
  end;
Run Code Online (Sandbox Code Playgroud)

现在,在我的主要表单中,我想用"proc"来表示:

procedure TForm1.Button1Click(Sender: TObject);
var
  t : TSendThread;
begin
    t := TSendThread.create(true);
    t.Synchronize(nil, t.proc('foo'));
end;
Run Code Online (Sandbox Code Playgroud)

但每当我尝试编译,我得到:

没有可以使用这些参数调用的"Synchronize"的重载版本

这对我来说没有意义,因为当我从"proc"中删除"S"参数时,它工作正常.

delphi multithreading

8
推荐指数
1
解决办法
1万
查看次数

在主线程中调用 TThread.Synchronize

窃取 Uwe Raabe 的文章 使用参数进行同步和队列我这样做:

if GetCurrentThreadID = MainThreadID then
  FDataLogger(IntToStr(lNrItems) + ' elements:')
else
  TThread.Synchronize(nil,
          procedure
          begin
            FDataLogger(IntToStr(lNrItems) + ' elements:');
          end);
Run Code Online (Sandbox Code Playgroud)

但如果我只是

  TThread.Synchronize(nil,
          procedure
          begin
            FDataLogger(IntToStr(lNrItems) + ' elements:');
          end);
Run Code Online (Sandbox Code Playgroud)

这似乎也有效。

由于第一个构造会导致更多代码,那么区分主线程真的有很多好处吗?

delphi multithreading delphi-10.3-rio

7
推荐指数
1
解决办法
5614
查看次数

标签 统计

delphi ×2

multithreading ×2

delphi-10.3-rio ×1