首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Delphi datasnap回调- BroadCast问题

Delphi datasnap回调- BroadCast问题
EN

Stack Overflow用户
提问于 2011-05-08 06:25:10
回答 2查看 3.5K关注 0票数 3

我又一次处于这样的境地,我花了大量的时间来尝试根据我的需求定制datasnap回调示例。我是一个老派的OOP程序员,在我的“工具箱”PODO风格中有几个非常大的对象层次结构:-) ..有了这个很棒的datasnap特性,我想利用回调的力量。

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

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

代码语言:javascript
运行
复制
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 ...但这根本是不可接受的。

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

问候比亚尼

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-08 16:00:47

可能的答案:你的问题很模糊,但根据你所说的,我会从这里开始:

Delphi XE帮助:(ms-help://embarcadero.rs_xe/vcl/DSServer.TDSServer.BroadcastObject.html):

函数BroadcastObject(const ChannelName: String;const CallbackId: String;const Msg: TObject):boolean;overload;

第二个重载使用给定的已注册回调标识符向所有客户端回调发送对象。为此,调用中需要一个额外的CallbackId参数。“

您正在使用第二个重载,它需要3个参数-您的回调标识符设置正确吗?

票数 0
EN

Stack Overflow用户

发布于 2011-05-13 22:51:05

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

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

我希望这能帮上忙

垫子

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5924396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档