LaB*_*cca 11 delphi multithreading
我创建了一个派生自TThread
后台执行查询的类.
我希望这个类与客户端分离.
这种线程的目的是执行简单的检查(比如当前有多少用户连接到应用程序,而不阻止UI),因此一个简单的想法是使用Synchronize方法.
无论如何,因为我希望它被解耦,我在构造函数中传递一个类型的参数
TSyncMethod: procedure of object;
Run Code Online (Sandbox Code Playgroud)
TSyncMethod
客户端上的方法在哪里(在我的情况下是一个表单).
无论如何我如何将值传递给TSyncMethod?我应该把结果写在一些"全球的地方",然后在我的TSyncMethod中检查它?
我也试过想
TSyncMethod: procedure(ReturnValue: integer) of object;
Run Code Online (Sandbox Code Playgroud)
但当然,当我打电话时,Synchronize(MySyncMethod)
我无法将参数传递给它.
对于这样一个简单的例子,你可以把所需的值放到线程的成员字段中(甚至放入线程自己的ReturnValue
属性中),然后使用中间线程方法执行回调的Synchronize(),然后你可以传递值回调.例如:
type
TSyncMethod: procedure(ReturnValue: integer) of object;
TQueryUserConnected = class(TThread)
private
FMethod: TSyncMethod;
FMethodValue: Integer;
procedure DoSync;
protected
procedure Execute; override;
public
constructor Create(AMethod: TSyncMethod); reintroduce;
end;
constructor TQueryUserConnected.Create(AMethod: TSyncMethod);
begin
FMethod := AMethod;
inherited Create(False);
end;
procedure TQueryUserConnected.Execute;
begin
...
FMethodValue := ...;
if FMethod <> nil then
Synchronize(DoSync);
end;
procedure TQueryUserConnected.DoSync;
begin
if FMethod <> nil then
FMethod(FMethodValue);
end;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3165 次 |
最近记录: |