【问题标题】:Howto in multi thread,call recursively function如何在多线程中调用递归函数
【发布时间】:2012-12-28 16:56:38
【问题描述】:

我写了一个函数来递归搜索与表单上的对象关联的文件,我在一个单独的线程中运行这个函数,所以UI线程没有问题。

如何使用 Synchronize,调用有参数的函数?

递归函数是否调用了 Synchronize 命令,我认为是正确的?

同步模式有相同的return all调用吗?

【问题讨论】:

  • 第一段我明白,第二段的答案是“你不能,Synchonize 是无参数的”。剩下的问题对我来说没有意义。
  • 要与主线程同步并调用具有1个或多个参数的函数,您可以执行 Synchronize(procedure begin MyFunctionWith(Param1, Param2, ParamN); end);
  • 感谢@GolezTrol,确保朋友们说可以实施技巧。我没有想到!我认为同步功能是参数化的。 :D

标签: multithreading delphi synchronization delphi-xe3


【解决方案1】:

您可以使用匿名方法拨打电话:

procedure TMyThread.Execute;
var
  MyParameter: Integer;
begin
  MyParameter := 42;
  Synchronize(
    procedure
    begin
      MethodWithParameter(MyParameter);
    end
    );
end;

【讨论】:

  • 爱匿名方法只是为了这种可能性:-)
【解决方案2】:

你可以这样做:

...
FMyValue := Xyz;
Synchronize(MyProc);
...

Procedure TMyThread.MyProc;
begin
  VclProc(FMyValue)
end;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多