2015-04-22 150 views
0

与TIDUDPServer实例中给定类。我的问题是,我怎么能''信号'返回到'定时器'的onTimer事件处理程序('TimerOnTimer')(定义为TUDPBC_FM字段)的形式/自定义类实例?Firemonkey印UDP广播

定时器的时间间隔被设置为2000毫秒,所以所有设备都有两秒钟的时间来响应广播,然后我想发送一个信号到窗体或类实例。

在我的VCL应用程序中,我使用了这个消息,但现在我在firemonkey上。

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


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; 

表格单元:

unit main_fm; 
... 
procedure TfrmMain.btnDiscoverClick(Sender: TObject); 
begin 
    mstcc.msts_Discover; 
    ... 
end; 

回答

1

我怎样才能 '信号' 回从onTimer事件处理程序( 'TimerOnTimer')形式/自定义类实例的'定时器'(定义为TUDPBC_FM字段)?

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

procedure TUDPBC_FM.NotifyProc; 
begin 
    // do something... 
end; 

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

procedure TUDPBC_FM.TimerOnTimer(Sender: TObject); 
begin 
    TThread.Queue(
    procedure 
    begin 
     // do something... 
    end 
); 
end; 

或者TIdNotify

procedure TUDPBC_FM.NotifyProc; 
begin 
    // do something... 
end; 

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

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;