gpt4 book ai didi

multithreading - 如何管理线程的返回值?

转载 作者:行者123 更新时间:2023-12-03 14:40:00 25 4
gpt4 key购买 nike

我创建了一个派生自 TThread 的类,该类在后台执行查询。

我希望此类与客户端解耦。

这种线程的目的是执行简单的检查(例如当前有多少用户连接到应用程序,而不阻塞 UI),因此一个简单的想法是使用 Synchronize 方法。

无论如何,因为我希望它解耦,所以我在构造函数中传递了一个类型的参数

TSyncMethod: procedure of object;

其中 TSyncMethod 是客户端上的一个方法(在我的例子中是一个表单)。

无论如何,我如何将值传递给 TSyncMethod?我应该将结果写在某个“全局位置”上,然后在我的 TSyncMethod 中检查它?

我也试着去想

TSyncMethod: procedure(ReturnValue: integer) of object;

但是当然,当我调用 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;

关于multithreading - 如何管理线程的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4136530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com