Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: TSocket-Warteschlangenproblem

  Alt 4. Feb 2006, 20:19
Hi,
es gibt zwei Dinge die dir hier weiterhelfen, mal ganz Schlagwortartig : Nichtsequentielle Programmierung und Protokoll. Hab mir jetzt nicht das Tutorial angeschaut, aber denke es passt zu deinem Problem.
Das leichtere Thema ist das Protokoll. Hier ist gar nicht so viel spezielles zu tun, du sendest nur einfach mehr als einen String. Wenn du Start- und Endzeichen mitschickst, dann ist immer klar, zuwem welcher Text gehört. Das sollten natürlich Zeichen sein, die keiner eintippt. Sagen wir mal z.B. #2 Dein Text, ... #3 , würde dann ein #2 Lokal : Bla #3 #2 Entfernt : Sein Text #3 ankommen, würdest du sicherstellen, dass du unterscheiden kannst welcher Text zu welchem Sender gehört.

Ein anderes Problem dass auftauchen könnte hat was mit NSP (Nichtsequentieller Programmierung) zu tun, könnte dir auch als Multithreading oder Nebenläufigkeit bekannt sein. Wenn du zwei Packete überträgst, so ist nie gesichert wann welches ankommt. Da du aber sicherlich gerne auf ein Event (Daten kommen an) reagieren möchtest, kann es also passieren, dass Daten von Lokal und Entfernt ankommen (bei mehr Teilnehmern analog). Würden jetzt alle auf die gleiche Variable zugreifen, hast du ein Problem. Beispielsweise wenn du etwas machst wie

Delphi-Quellcode:
var s : String; // global
...
s := Client.GetString; // hier irgendwas, was den Text einliest
ShowMessage(s);
Dann kann es zu folgendem Ablauf kommen
Delphi-Quellcode:
// allet pseudocode
s := 'Lokal'; // Client.getString durch lokal ausgelöst;
s := 'Entfernt'; // UPS, da kommt schon entfernt an und das bevor der Text ausgegeben wurde
ShowMessage(s); // Showmessage von entfernt ausgelöst
ShowMessage(s); // jetzt kommt erst Showmessage von Lokal ausgelöst, aber mit falschem Inhalt der variable
Damit das nicht passiert, müsstest du Synchronisieren. Rund um das Thema Threading findest du eine Menge guter Tutorials dazu, die dir sicher weiterhelfen (auch die Delphi Hilfe hat da tipps).

Gruß Der Unwissende
  Mit Zitat antworten Zitat