gpt4 book ai didi

Delphi datasnap 回调 - 广播问题

转载 作者:行者123 更新时间:2023-12-03 15:57:22 27 4
gpt4 key购买 nike

我再次遇到这样的情况:我花费了大量的时间来尝试根据我的需要自定义 datasnap 回调示例。我是老派的 OOP 程序员,在我的“工具箱”PODO 风格中有几个非常大的对象层次结构:-) ..并且拥有这个出色的 datasnap 功能,我想利用回调的力量。

但是 - 当我实现它时...它只是失败...(FASTMM4 报告内存泄漏)。

尝试创建一个简单的 VCL datasnap 服务器 - TCP。并添加一个按钮和这个源...

procedure TForm1.Button1Click(Sender: TObject);
var
// AObject : TObject;
aJSONVal : TJSONValue;
begin
// AObject := TObject.Create;
// ServerContainer1.DSServer1.BroadcastObject('SomeChannel','SomeCallbackID', AObject);
// AObject.Free;

aJSONVal := TJSONObject.Create;
ServerContainer1.DSServer1.BroadcastMessage('SomeChannel','SomeCallbackID',aJSONVal);
// aJSONVal.Free; // Mat pointed out that this is done by the broadcast.
end;

它会起作用 - 只要你继续使用 TJSONValue ...但是尝试切换注释代码 - 你就会明白我的意思。

我当然可以将所有现有代码更改为 JSON ...但这根本 Not Acceptable 。

有人知道如何使用 BroadcastOBJECT 或 NotifyOBJECT 吗?

问候比亚内

最佳答案

您提供给“通知”或“广播”调用的对象将归该调用所有。因此不要调用“AObject.Free;”或“aJSONVal.Free;”。这样做通常会导致访问冲突或其他内存管理相关问题。

另请注意,广播消息会放入服务器上的队列中,然后在不同的线程中发送。这意味着,当您对 Broadcast 的调用返回时,它实际上尚未将消息发送给所有客户端。

希望对您有所帮助,

垫子

关于Delphi datasnap 回调 - 广播问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5924396/

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