Registriert seit: 26. Jun 2008
161 Beiträge
Delphi 2007 Professional
|
"Grundsatzfrage" zur Thread-Programmierung
18. Sep 2008, 15:28
Hiho,
hab da mal ne grundlegende Frage, die ich eigentlich nich im Detail sondern eher grob beantwortet haben möchte, da ich damit erst demnächst anfangen kann, wollte mich nur im Vorfeld schon ma etwas schlau machen, worauf ich so zu achten hab.
Bisher laufen meine Programm meist nach folgendem Schema ab:
- Form wird gestartet
- Benutzer tätigt Eingaben
- Benutzer startet per Button die Verarbeitung bestehend aus Prozeduren und/oder Funktionen innerhalb des Formulars geschieht
- Benutzer schließt das Programm
Also ne stinknormale Windows-Anwendung im klassischen Sinne halt.
...
Jetzt habe ich vor folgendes zu machen:
- Form wird gestartet
- Benutzer tätigt Eingaben
- Benutzer startet per die Verarbeitung bestehend aus 3 Threads.
1 Thread zum Lesen der Daten aus der Datenbank und wandeln in Datenstrukturen
1 Thread zum verarbeiten der Datenstrukturen
1 Thread zum schreiben der verarbeiteten Daten in eine Ausgabedatei
- Benutzer schließt das Programm
Sprich: Ich möchte die Verarbeitung von 1 auf 3 Threads aufteilen, um die CPU-Nutzung zu erhöhen und die Laufzeit zu verbessern.
...
Meine Frage bezieht sich jetzt auf die Interaktion zwischen den Freds
Ich habe mir das in etwa so vorgestellt:
Thread 1: Liest Daten aus Datenbank, wandelt und gruppiert diese in brauchbare Datenstrukturen
und stellt jede Datenstruktur sobald sie fertig ist in eine TList z.B.
Thread 2: Überprüft diese TList stetig auf bereit gestellte Daten,
verarbeitet den Datensatz und stellt diesen in eine zweite TList.
Thread 3: Überprüft die zweite TList auf bereit gestellte Daten,
und gibt die Datensätze aus.
...
Schematisch dargestellt
Thread1 (Liest Daten...)
|
v
TList 1
^
|
Thread 2 (Verarbeitet Daten...)
|
v
TList 2
^
|
Thread 3 (Gibt Daten aus...)
...
Ist das so machbar oder gibt es dann Probleme mit dem gleichzeitigen Zugriff auf die TListen z.B.?
Bzw. wer hat sowas schon gemacht / macht sowas und könnte mir sagen worauf man da als mehr oder weniger Threadunerfahrener Mensch achten muss?
Danke im Voraus
cu Patrick
|