Hi,
erstmal danke für die Anerkennung *lol*
Erstmal muss ich vorweg sagen, das ich mit Delphi6 und Indy9 arbeite und Du verwendest Indy10.
Aber das sollte nicht das Problem seien, die Logik zu analysieren.
Ich habe jetzt gerade Deine Source-Code überflogen und dabei habe ich einige Sachen gefunden die ich anders machen würde(besser liegt ja im Auge des Betrachters
)
1. Die Idee mit der Que ist ja nicht schlecht, aber warum bastelest Du die so ein kompliziertes Konstrukt ?
Warum arbeitest Du nicht mit TList, TObjectList oder TThreadList ?
Dort hast Du schon eine fertige Klassen die Listen jeglicher Art verwalten. TThreadList ist sogar schon Threadsafe!
2. Bei Button Click fügst Du 5 mal die gleiche Datei für den gleichen Server in die Que warum ?
3. Anstatt des Timers solltest Du auf jeden Fall mit einen Thread arbeiten.
4. Warum die ganzen globalen Variablen ? Die gehören in die Hauptklasse.
Zu Deinem Hauptproblem:
Da ich leider kein Indy10 installiert habe kann ich das ganze leider nicht debuggen sondern nur tippen.
Du schreibst/schickst beim Write die Größe des Streams mit und beim Read liesst Du erst die Größe des Streams aus und liesst dann exakt die Anzahl von Bytes in den Stream. Das kann so richtig seien, aber in Indy9 muss ich wenn ich die Byte Größe des Streams mitgeschickt habe beim Lesen vorher nicht die Größe mitauslesen, das hat
Indy automatisch gemacht. Du könntest in Deinem Fall bis zum Disconnect Lesen, den Dein Server liesst ja immer nur Daten und danach wird disconnected.
Also, ich würde eine komplette Klasse schreiben die alles was mit dem Client zu tuen hat verwaltet.
Innerhalb dieser Klasse würde ich eine Unterklasse schreiben die von TThread Abgeleitet ist und Deine "Abarbeitungsliste" in TThreadlist verwaltet.
Im Execute des Thread würde ich dann prüfen ob gerade Elemente in der Liste vorhanden sind, wenn ja das erste Element aus der Liste Lesen, aus der Liste entfernen und zum Server schicken.
Wenn er fertig ist mit verschicken das ganze wieder von vorne, also ne schleife drum machen
Hoffe das ganze hilft Dir ein wenig weiter, mehr kann ich leider ohne Indy10 und Höhere Delphi Version nicht sagen.
Gruß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.