首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firemonkey广播

Firemonkey广播
EN

Stack Overflow用户
提问于 2015-04-22 14:26:53
回答 1查看 520关注 0票数 0

具有TIDUDPServer实例的给定类:

代码语言:javascript
复制
unit udpbroadcast_fm;

TUDPBC_FM = class( TObject )
protected
  IdUDPServer: TIdUDPServer; 
  Timer: TTimer;
  ...
  procedure IdUDPServerUDPRead( AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle );
  procedure TimerOnTimer( Sender: TObject );
public
  constructor Create;
  function SendDiscover: integer;  
properties  
  ...
end;

function TUDPBC_FM.SendDiscover: integer;  
begin
...
IdUDPServer.Broadcast( udpDiscovery, BCport );
...
end;

我使用这个类发送UDP广播消息。我的问题是,如何从‘onTimer’事件处理程序('TimerOnTimer') 'Timer‘(定义为TUDPBC_FM字段)’发送信号‘回表单/自定义类实例?

计时器的间隔被设置为2000毫秒,所以所有设备都有两秒钟的时间来回答广播,然后我想向表单或类实例发送一个信号。

在我的VCL应用程序中,我曾为此使用消息,但现在我使用的是防火墙。

也许唯一的办法就是用另一种方法?例如,将计时器作为表单的字段?)。

代码语言:javascript
复制
unit mstcc_fm;

Tmstcc = class(TObject)
protected
  Fudpbc : TUDPBC_FM;
  ...
public
  function msts_Discover: integer; 
  ...
end;

function Tmstcc.msts_Discover: integer;    
begin
  ...
  Fudpbc.SendDiscover;
  ...
end;

表格单位:

代码语言:javascript
复制
unit main_fm;
...
procedure TfrmMain.btnDiscoverClick(Sender: TObject);
begin
  mstcc.msts_Discover;
  ...
end;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-22 23:07:54

如何从定时器(定义为onTimer字段)的onTimer事件处理程序('TimerOnTimer')‘向表单/自定义类实例’发送信号?

你可以使用TThread.Queue(),例如:

代码语言:javascript
复制
procedure TUDPBC_FM.NotifyProc;
begin
  // do something...
end;

procedure TUDPBC_FM.TimerOnTimer(Sender: TObject);
begin
  TThread.Queue(NotifyProc);
end;

代码语言:javascript
复制
procedure TUDPBC_FM.TimerOnTimer(Sender: TObject);
begin
  TThread.Queue(
    procedure
    begin
      // do something...
    end
  );
end;

TIdNotify

代码语言:javascript
复制
procedure TUDPBC_FM.NotifyProc;
begin
  // do something...
end;

procedure TUDPBC_FM.TimerOnTimer(Sender: TObject);
begin
  TIdNotify.NotifyMethod(NotifyProc);
end;

代码语言:javascript
复制
type
  TMyNotify = class(TIdNotify)
  protected
    procedure DoNotify; override;
  end;

procedure TMyNotify.DoNotify;
begin
  // do something...
end;

procedure TUDPBC_FM.TimerOnTimer(Sender: TObject);
begin
  TMyNotify.Create.Notify;
end;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29800707

复制
相关文章

相似问题

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