2012-12-28 30 views
1

我写了一个递归搜索与窗体上的对象关联的文件的函数,我在单独的线程中运行此函数,所以UI线程不是问题。如何在多线程中调用递归函数

如何使用Synchronize,我调用一个具有参数的函数?

是递归函数调用Synchronize命令,我有合理的正确吗?

同步模式具有相同的返回所有呼叫?

+2

我明白第一段,回答第二个是“你可以用” t,同步无参数“。问题的其余部分对我没有意义。 – GolezTrol

+2

与主线程同步并调用带有1个或更多参数的函数,可以执行Synchronize(过程开始MyFunctionWith(Param1,Param2,ParamN); end); – ComputerSaysNo

+0

感谢@GolezTrol,确保朋友们说可以实现的技巧。我没有想到!我认为Synchronize函数是参数化的。 :D – HamiD

回答

6

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

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

只为了这种可能性而爱匿名方法:-) –

2

你可以这样做:

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

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