AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Taktik bei Laden von Business-Objekten in Threads
Thema durchsuchen
Ansicht
Themen-Optionen

Taktik bei Laden von Business-Objekten in Threads

Ein Thema von s.h.a.r.k · begonnen am 18. Jun 2010 · letzter Beitrag vom 18. Jun 2010
Antwort Antwort
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

Taktik bei Laden von Business-Objekten in Threads

  Alt 18. Jun 2010, 15:44
Ich habe mal wieder eine generelle Frage zum Laden von Daten via Threads. Im Moment habe ich es so, dass ich eine ganze Reihe von Business-Objekten, die auch untereinander verknüpft sind, via Thread lade, dann eine Message an meinen Haupthread schicke, sodass diese Daten übernommen werden (-> Assign()). Nun ist es ja so, dass ich für das Laden Zeit benötigt und für das übernehmen der Daten ebenfalls.

Jetzt habe ich mir überlegt, dass ich doch evtl. folgendes machen könnte: ich habe ja einen Daten-Container für die Daten im Hauptthread und dann einen temporären im Thread. Bisher wird ja immer der temporäre Container freigegeben nachdem die Daten übernommen worden sind. Wäre es aber an dieser Stelle nicht evtl. besser, wenn ich den Datencontainer im Main-Thread freigebe und den aus dem Thread übernehme?! Oder bekomme ich da evtl. Probleme, da dieser Container ja im "Lade-Thread" erzeugt wird? Was würde für die aktuelle Lösung mit dem Assign sprechen?

Ich sollte an dieser Stelle noch erwähnen, dass ich immer alle Daten neu lade und nicht nur Teile, da es sonst unter Umständen inkonsistent werden könnte, was ich auf jeden Fall verhindert muss. Dies liegt vor allem an den Verknüpfungen der Datensätze untereinander.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Taktik bei Laden von Business-Objekten in Threads

  Alt 18. Jun 2010, 15:57
Es wäre mehr als sinnvoll wenn du die Daten aus dem Thread übernimmst anstelle diese dann zu kopieren. Ob dies jedoch möglich ist hängt von den Daten ab. Sind es einfach nur Texte? Oder handelt es sich im grafische Dinge (Panels etc.)?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

AW: Taktik bei Laden von Business-Objekten in Threads

  Alt 18. Jun 2010, 16:10
Es sind an sich nur primitive Daten und haben nicht mit Handles zu tun. Den Fehler habe ich neulich ja schon mal gemacht

Habe das gerade nur mal zu Testzwecken probiert und bin gleich auf das Problem gestoßen, dass ich alle Event-Verknüpfungen neu setzen musste, was so nicht geplant war, aber an sich klar ist. Aber gut, das jedes mal zu setzen ist nicht das Problem.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

AW: Taktik bei Laden von Business-Objekten in Threads

  Alt 18. Jun 2010, 17:40
Also ich würde alle nötigen Objekte, die die Thread-Klasse braucht im Hauptthread erzeugen. (Stichwort: Dependency Injection)
Die Objekte haben also zunächst mal keinen Inhalt.

Damit hat man die Freiheit, die Objekte im Hauptthread oder im Thread selbst zu laden.

Dann muss man sich darüber klar werden wem die Objekte gehören; also wer der "Owner" ist.
Mal angenommen, eine Thread-Klasse benötigt ein Artikel-Objekt und eine Datenbank-Connection.
Die Datenbank-Connection ist sicher ein sehr langlebiges Objekt; es wird also dem Thread nur einfach so mitgegeben.
Das Artikel-Objekt dagegen wird kurzfristig im Hauptthread erzeugt und dem Thread übergeben.
Damit geht auch die Verantwortung das Artikel-Objekt freizugeben an das Thread-Objekt über.
Delphi-Quellcode:
procedure TMainForm.StartNewArtikelThread(artikelnummer:string);
var
  meinThread : TMeinThread;
  artikel : TArtikel;
begin
  artikel := TArtikel.create;
  artikel.ArtikelID := artikelnummer;
  // hier könnte man das Objekt laden oder man überlässt das dem Thread
  // artikel.LoadFromDataSet(QryArtikel);

  meinThread := TMeinThread.Create(True);
  meinThread.DBConnection := DataModuleMain.DBConnection;
  meinThread.Artikel := artikel; // meinThread muss Artikel freigeben
  meinThread.Logger := FFileLogger;
  meinThread.Resume;
end;
Andreas
  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 18:22 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