2015-04-22 185 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;