Hi Leute,
ich habe eine einfache frage zu den TServerSocket/TClientSocket Komponenten in Delphi7.
Jede der beiden Komponten hat ein OnEvent Methode, die beim Empfang von Daten ausgelöst wird.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure Tmain.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket); var Data : String; begin Data := Socket.ReceiveText; end;
procedure Tmain.ClientRead(Sender: TObject; Socket: TCustomWinSocket); var Data : String; begin Data := Socket.ReceiveText; end; |
In meinem Fall beinhaltet jede der beiden Methoden eine Procedure deren Komplexität in Zeit und Speicher von den erhaltenen Daten abhängt. Diese Procedure trägt auch Informationen in Array ObjectListen und anderen Varaibalen ein.
Die Datenpakete kommen sehr schnell hintereinander wobei es zu Fehler kommt. Ich konnte die Fehler soweit zurück debuggen, dass es Fehlstellen in den Listen gibt.
1. Paket (Ankunft nach 00ms) (Auftrag: Erstelle Object A)
2. Paket (Ankunft nach 10ms) (Auftrag: Bearbeite Object A)
Das erstellen von Object A, was durch das erste Paket ausgelöst wird dauert aber ca. 140 ms. Soweit ich das sehe, führt Delphi aber bevor das erste OnRecv komplett durchgelaufen ist schon parallel ein zweites OnRecv aus, genau in dem moment wenn Paket 2 eintrifft.
(Stimmt das?)
Die Funktion GetObjectFromList(A) findet Object A aber noch nicht, weil das erstellen und eintragen in die Liste länger dauert.
Wie kann ich den Zugriff auf meine Procedure(die, die die Pakete verarbeitet) so ändern, dass die OnRecv Threads warten bis der jeweils vorherrige Durchlauf beendet ist?
Mit freundlichen Grüßen
Tobi