Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Wie eine solche Thread-Problematik elegant lösen? (https://www.delphipraxis.net/162207-wie-eine-solche-thread-problematik-elegant-loesen.html)

marcoX 12. Aug 2011 13:52

Wie eine solche Thread-Problematik elegant lösen?
 
Delphi-Quellcode:
BeginThread(....)
//Warte nun bis Thread fertig ohne Form einzufrieren
weitere normale Befehle...
BeginThread(....)
//Warte nun bis Thread fertig ohne Form einzufrieren
weitere normale Befehle...
Natürlich kann man das mit Timern, globalen Variablen oder Threads die sich (erst sobald sie fertig sind) dann wieder gegenseitig aufrufen, mehr oder weniger unelegant lösen. Doch gibt es auch einen eleganten Weg? Es so wie oben zu schreiben bringt ja nichts, Delphi übergeht alles was zwischen den Threads ist und startet die einfach alle gleichzeitig.

(Wozu das ganze? Einige werden sagen: "Threads sind doch gerade dazu da, alles gleichzeitig zu machen, darauf zu warten oder solch eine Konstruktion ist doch Unsinn". Naja, manchmal würde man am liebsten gar keine Threads nutzen, sondern normalen "Spaghetti Code", braucht die Threads aber, weil sonst die Form bei starker I/O etc. einfriert. Und dann braucht man eben Konstrukte wie oben.)

MGC 12. Aug 2011 14:26

AW: Wie eine solche Thread-Problematik elegant lösen?
 
Wieso sollte Spaghetti-Code eigentlich besser sein als Threads zu verwenden?

Setz Deine normalen Befehle ebenfalls in einen eigenen Thread und füge eine Nachrichtenverarbeitung hinzu. Synchronisiere Deine Threads und überwache die Zugriffe (z.B. Semaphore) und pausiere die nicht verwendeten Threads, bzw. setze sie in eine Message-Wartesituation und erwecke sie mittels Message wieder zur Weiterarbeit.
Das ist, zumindest für mich, wesentlich eleganter als Nudelsalat, egal ob mit oder ohne Würstchen. ;)

marcoX 12. Aug 2011 14:35

AW: Wie eine solche Thread-Problematik elegant lösen?
 
Zitat:

Zitat von MGC (Beitrag 1116451)
Das ist, zumindest für mich, wesentlich eleganter als Nudelsalat, egal ob mit oder ohne Würstchen. ;)

Aber es macht deutlich mehr Arbeit :D

DeddyH 12. Aug 2011 14:37

AW: Wie eine solche Thread-Problematik elegant lösen?
 
Man kann aber auch auf fertige Threadpool-Bibliotheken zurückgreifen. Einige davon sind hier im Forum zu finden.

MGC 12. Aug 2011 14:52

AW: Wie eine solche Thread-Problematik elegant lösen?
 
Zitat:

Zitat von marcoX (Beitrag 1116459)
Aber es macht deutlich mehr Arbeit :D

Aber es gibt Dir auch entscheidende Vorteile, wenn Du Dein Programm später erweitern oder überarbeiten möchtest. Spaghetti-Code ist in der hinsicht immer problematisch und wird schnell sehr unübersichtlich. (<- Da spreche ich aus eigener Erfahrung ***Rückblick auf meine Anfangszeit***)

s.h.a.r.k 12. Aug 2011 17:06

AW: Wie eine solche Thread-Problematik elegant lösen?
 
Zitat:

Zitat von marcoX (Beitrag 1116459)
Zitat:

Zitat von MGC (Beitrag 1116451)
Das ist, zumindest für mich, wesentlich eleganter als Nudelsalat, egal ob mit oder ohne Würstchen. ;)

Aber es macht deutlich mehr Arbeit :D

Wenn Dinge einfach herumliegen ist es auch einfacher, die Türe der Rumpelkammer zu öffnen und alles rein zu werfen. Aber wehe man muss da nochmal ran :stupid: Macht man diverse Dinge sauber ist es immer ein gewisser Mehraufwand, der sich später aber total lohnt imho.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:08 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