Einzelnen Beitrag anzeigen

Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#3

AW: Mehere Instanzen einer Procedure erstellen in Delphi 2007.net

  Alt 24. Sep 2010, 14:03
ich hab eine Frage zu Delphi 2007.net.
Erstmal mein ehrliches, herzliches Beileid.

Ich habe in einer Procedure eine Verbindung an eine Datenbank und konstant eine Tabelle offen. Wenn ich einen 2. Thread erzeuge wird wieder auf die selbe Procedure gezeigt, aber diesmal mit einem anderen Tabelleninhalt.
Woah. Den Code möchte ich lieber nicht sehen. Es ist schon ein Unding, dass das alte Delphi .NET klassenlose Methoden zulässt. Das kann die .NET Runtime nämlich schon gar nicht.

Wie hältst Du eigentlich 'konstant eine Tabelle offen'? Theoretisch sollte es doch reichen, ein System.Data.DataSet in einer statischen Variable zu halten. Lesende Zugriffe können darauf ohne weiteres Multithreaded erfolgen, aber beim Schreiben sollte das Object gesperrt werden. Siehe auch: http://msdn.microsoft.com/en-us/library/ms971481.aspx

Wenn da ein neuer Aufruf gegen die Datenbank passiert: Ist im ersten Thread eine Transaction offen die noch nicht commited wurde? Es könnte nämlich sein, dass der zweite Thread eine neue Verbindung aufmacht und dann an der Transaction des ersten Threads 'vorbei' liest.

Habe ich eine Chance die Procedure als eigene Instanz laufen zu lassen, oder muss ich das mit einer Klasse realisieren, damit das klappt ?
Die Methode sollte von der Runtime eigentlich schon per default automatisch in dem Thread ausgeführt werden, aus dem sie aufgerufen wird. Ausser, der Delphi-Compiler macht da im Hintergrund irgendwelche Schweinereien die das auf dem Hauptthread invoken lassen. Aber das traue ich den Jungs nicht zu.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat