WedX - журнал о программировании и компьютерных науках

Firemonkey - трансляция Indy UDP

Данный класс с экземпляром TIDUDPServer:

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» (определяется как < em>TUDPBC_FM)?

Интервал таймера установлен на 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») «Timer» (определяется как поле 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;

Or 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;
22.04.2015
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]