AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Programmdesign / Kommunikation mit Gerät über UDP
Thema durchsuchen
Ansicht
Themen-Optionen

Programmdesign / Kommunikation mit Gerät über UDP

Ein Thema von x000x · begonnen am 15. Jul 2007 · letzter Beitrag vom 16. Jul 2007
Antwort Antwort
Benutzerbild von x000x
x000x

Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
 
Delphi XE2 Professional
 
#1

Programmdesign / Kommunikation mit Gerät über UDP

  Alt 15. Jul 2007, 12:14
Folgende Situation:

Ich muss mit einem Netzwerkfähigem Gerät über UDP kommunizieren. Ich kann an
das Gerät Befehle schicken und bekomme daraufhin eine Antwort. Je nach dem
wie die Antwort war, muss ich evtl. weitere Befehle an das Gerät senden und
wiederum auswerten.

Jetzt kann es aber auch sein, dass mir das Gerät "ungefragt" UDPPakete
schickt, da sich an seinem Zustand was geändert hat.
Daraufhin muss ich evtl. "Zeitaufwändige" DBAbfragen starten und wiederum
Befehle an das Gerät schicken.

Und zu guter Letzt: Es handelt sich nicht nur um ein Gerät sondern um mehrere.
Was ich bereits habe:
  • TIdUDPServer im Main zum empfangen der Antworten bzw. Status
  • einen (VCL)Thread (pro Gerät)
  • TIdUDPClient im Thread zum senden der Befehle
Ich wollte jetzt eigentlich den Thread über Events triggern. z.B.
Kommen Daten am UDPServer an, werden sie - je nachdem von welchem Gerät sie kamen -
in einen Puffer des dazugehörenden Threads geschrieben und ein Event wird gesetzt. Der Thread
arbeitet je nach empfangenen Daten die Routinen ab und geht dann wieder in
Wartestellung (WaitforMultipleObjects im Execute)

Hier mal Pseudocode aus dem Execute:
Delphi-Quellcode:
while Not Terminated do begin
   case WaitForMultipleObjects(2, @FHandles, False, INFINITE) of
      WAIT_OBJECT_0 + 0 : Terminate;
      WAIT_OBJECT_0 + 1 :
         begin
            case Buffer of
               Antwort1: ;
               Antwort2: ;
               Antwort3: ;
               //...
            end;
         end;
   end;
end;
Das Problem besteht jetzt darin, dass ich z.B. bei Antwort1 mehrere Befehle an das Gerät
schicken müsste, worauf ich dann ja auch wieder Antworten bekomme. Der Thread befindet sich
dann aber nicht in Warteposition sondern irgendwo bei Antwort1. Das wollte ich dann so lösen,
das ich eine Funkion SendeBefehl implementiere.
Delphi-Quellcode:
proceduer SendeBefehl(Befehl);
begin
   UDPClient.Send;
   WaitForSingleObject
end;
Dazu brauchte ich dann aber wiederum ein neues Event. (Jetzt sind es schon 2)
Nun muss ich aber auch sicherstellen, das der UDPServer nur Daten in den Puffer schreibt, wenn der
Thread Wartet. Somit habe ich 2 weitere Events eingeführt (Ein für das Warten im Execue ein
für SendeBefehl)

Ich vermute mal, dass mein Programmablauf nicht der effektivste ist. Wie würdet ihr
so ein Programm gestalten?

Wie würdet ihr die Daten vom UDPServer an den Thread übergeben?
Peter
-= Gruss Peter =-
-= alias x000x =-
  Mit Zitat antworten Zitat
Benutzerbild von x000x
x000x

Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Programmdesign / Kommunikation mit Gerät über UDP

  Alt 16. Jul 2007, 23:12
Moin moin,

habe es vermutlich nicht verständlich genug erklärt...
Naja, ich habe es - wie oben beschrieben - umgesetzt, also
ich trigger meine Threads mit Events.
UND... es funktioniert
Peter
-= Gruss Peter =-
-= alias x000x =-
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz