AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Thread or no Thread

Ein Thema von Jumpy · begonnen am 11. Apr 2011 · letzter Beitrag vom 11. Apr 2011
Antwort Antwort
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#1

Thread or no Thread

  Alt 11. Apr 2011, 13:01
Hallo zusammen,

ich habe gerade eine Programmieraufgabe bekommen, von der ich denke, dass es vllt. Sinn macht dies mit Threads zu erledigen (wäre das erste mal das ich richtig damit arbeite und alleine das ist schon ein Grund, damit ich das "by doing learne" (hoffentl. ist hier kein Engländer, dem jetzt schlecht wird)). Trotzdem wollt ich mir da vorher mal einige Meinungen zu einholen und vllt. auch schon ein paar Tipps abholen .
(Luckies Tutorial hab ich gerade begonnen durchzulesen, wollte aber parallel dazu hier schonmal die Ausgangslage schildern).

Das Programm soll über komplizierte, langedauernede SQL-Abfragen Daten aus diversen Tabellen zusammensuchen und neue Tabellen mit dem Ergebnis der Abfragen erstellen (Create Tabele ABC as (Select...)). Insgesamt sollen so 8 Tabellen erstellt werden, die teilweise aufeinander aufbauen, d.h. Tabelle 2 kann erst nach Tabelle 1 erstellt werden, teilweise aber auch nicht, so kann z.B. Tabelle 3 direkt erstellt werden. Tabelle 4 braucht dann aber schon wieder Tabelle 2 und 3.

Ich sehe das so, dass Threads eingentlich erstmal nicht nötig sind, ich das ganze also auch linear hintereinander abackern lassen kann. Bis auf die 2-3 unabhängigen Tabellen, die ich parallelisieren könnte, hätte ich keinen Performance Gewinn, oder?

Das Programm ist aber während der Ausführung nicht ansprechbar, d.h. diese Geschichten in Threads auszulagern würde das Hauptprogramm ansprechbar bleiben lassen, oder?

Zur Vorgehensweise: Würde man alle Threads gleichzeitig starten und Thread 4 macht erst mal nix, bis 2 und 3 melden, dass sie fertig sind oder lässt man dem Hauptprogramm die Kontrolle, so dass es z.B. Thread 1 und 3 startet, Thread 2 wenn 1 fertig ist, Thread 4 wenn 2 und 3 fertig sind?

Soweit ich das mit der Klasse TThread verstanden habe, erstelle ich einen Nachfolger davon, der eine Funktion enthält, die dann ausgeführt wird. Kann ich der Funktion schon einen Parameter mitgeben (z.B. im Konstruktor der Klasse oder so)? Hintergrund: Ich bräuchte dann nur einen Nachfolger von TThread, da meine "Threads" ja immer das selbe machen sollen:
- SQL-Statement aus Datei laden (d.h. Pfad muss übergeben werden)
- Neue Tabelle erzeugen (d.h. Tabellenname muss übergeben werden).

Wie ist das mit der Datenbank Connection (ADO)? Brauchen alle Threads eine eigene oder können die sich die Teilen? Macht das Sinn?


Mehr Fragen kommen bestimmt, wenn ich mit dem Tutorial durch bin und es an die konkrete Umsetzung geht (es sein den ihr seit der Meinung, das Threads in dem Zusammenhang keinen Sinn machen).

Danke schonmal an die, die sich den Roman bis hierher durchgelesen haben,

Jumpy
Ralph
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
655 Beiträge
 
Delphi 12 Athens
 
#2

AW: Thread or no Thread

  Alt 11. Apr 2011, 13:19
Deine Eingangsfrage war ja erst mal, ob Threads überhaupt nötig sind an dieser Stelle. Da wäre die Gegenfrage: Soll denn noch irgendwas anderes passieren, während die Abfragen laufen? Soll der Benutzer noch an anderer Stelle im Programm arbeiten können? Oder möchtest du einfach nur, dass das Programm nicht den Eindruck macht, es sei eingefroren?

Das ging aus deiner Beschreibung nicht so ganz hervor.

Bis denn
Bommel
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#3

AW: Thread or no Thread

  Alt 11. Apr 2011, 13:27
Letzteres.
Ralph
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: Thread or no Thread

  Alt 11. Apr 2011, 13:31
Ist Threading da wirklich das Richtige?

Wenn die erzeugten Tabellen systemweite Bedeutung haben und kein individuelles Reporting darstellen, ist die Erzeugung doch eher Serveraufgabe oder?
Wie lange wird es denn dauern, die Tabellen zu erzeugen?
Was passiert, wenn der User (dank Threading )gar nicht merkt, dass da noch was läuft und seine Anwendung schließt?
Was passiert, wenn die Hauptanwendung abschmiert oder das System der Hauptanwendung?

Idee:
  • Business OP serverseitig definieren, ggF. nebenläufige Teile.
  • Start über Client nebenläufig
(dafür gibt's je DB und OS verschieden nette Möglichkeiten schon in der DB, notfalls Cron oder AT, bzw SchedTask bei MS WIN als Server )

Threading im Client für Statusfenster
(die berühmte Prozentanzeige)
Gruß, Jo
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
655 Beiträge
 
Delphi 12 Athens
 
#5

AW: Thread or no Thread

  Alt 11. Apr 2011, 13:34
Ich selbst würde es in dem Fall wohl eher so machen, dass ich ohne Threads arbeiten würde. Eher würde ich dem Benutzer mitteilen, er möge sich jetzt etwas gedulden und dann die Datenbank-Operationen ganz normal im Hauptprogramm starten. Zwischendurch vielleicht bei passender Gelegenheit noch ein paar "Application.ProcessMessages", damit das Programm nicht völlig tot wirkt.

Falls du natürlich einfach nur auf eine Gelegenheit wartest, das Thema Threads näher kennenzulernen, könntest du das Programm so etwas aufhübschen.

So meine Einschätzung...

Bis denn
Bommel
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:39 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