Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Vorgehensweise Threads + TIdTCPClient

  Alt 28. Jan 2021, 19:13
Pro Thread ein TCPClient.
Ansonsten müsstes du die Zugriffe wieder synchronisieren, womit es dann wieder nacheinander abgeht.

Aber die TCP-Abfragen selber sollten doch nicht so lange dauern?
Somit kannst die alle 3 in einem Thread laufen lassen.

Außerdem kannst die Threads nach der Abfrage weiterlaufen lassen. (das starten und beenden von Threads verbraucht eine "Menge" Zeit)
Das könnte man eventuell über Fiber, bzw. TTask/TFuture beheben. (da laufen mehrere Fibers/Tasks nacheinander im selben Thread, bzw. in einem ThreadPool)

z.B.
  • ein Thread macht alle 60 Sekunden die TCP-Abfragen
    • und eventuell auch gleich das Parsen der XML (sollte eigentlich auch schnell gehn)
    • TCPClient und XML-Klassen bleiben bestehen und werden im nächsten Durchlauf gleich wiederverwendet ... bräuchte dann vermutlich auch nur einmal die "Anmeldung" (vielleicht nach xxx Minuten nochmal erneut, falls es eine MaxLifeTime für die Anmeldung gibt)
  • das Ergebnis davon wird dann an einen weiteren Thread übergeben, welcher das in die Liste einträgt und sonstwas Zeitaufwändiges macht (falls die Liste Threadsave ist, können das auch mehrere Threads parallel machen)
    • falls das Eintragen in die Liste es erlaubt "mehrere" Datensätze "schneller" zusammen zu verarbeiten, dann kann der Abfrage-Thread seine Ergebnisse in eine Liste Eintragen, wo der ArbeitsThread dann einen/mehrere vorhandene Einträge sich rausholt (z.B. wenn eine Berechnung mal länger als 60 Sekunden brauchte, dann sind im nächsten Durchlauf ja auch mehrere neue Daten reingekommen)
  • und am Ende gibt es ein Synchronize oder Queue, welches die fertige Berechnung nur noch "schnell" in die GUI einträgt (nur hier hängt dann mal ganz kurz der Hauptthread)
    • alternativ auch als Event, wo der Arbeitsthread seine Ergebnisse in eine Liste einträgt und sich durch das Ebent angestoßen der dann in einem Rutsch einen/mehrere Ergebnisse zusammen in die GUI einträgt (falls die GUI mal hing)
$2B or not $2B

Geändert von himitsu (28. Jan 2021 um 19:23 Uhr)
  Mit Zitat antworten Zitat