Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   .NET-Framework (managed code) (https://www.delphipraxis.net/79-net-framework-managed-code/)
-   -   Delphi Mehere Instanzen einer Procedure erstellen in Delphi 2007.net (https://www.delphipraxis.net/154766-mehere-instanzen-einer-procedure-erstellen-delphi-2007-net.html)

Digielm 24. Sep 2010 10:11

Mehere Instanzen einer Procedure erstellen in Delphi 2007.net
 
Hallo an alle

ich hab eine Frage zu Delphi 2007.net.
Ich habe grade versucht mit Threads zu arbeiten, dabei ist mir leider aufgefallen das das ganze nicht so läuft wie ich will.
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. Habe ich eine Chance die Procedure als eigene Instanz laufen zu lassen, oder muss ich das mit einer Klasse realisieren, damit das klappt ?


Danke im Voraus

Satty67 24. Sep 2010 11:21

AW: Mehere Instanzen einer Procedure erstellen in Delphi 2007.net
 
Ich kann mich auch irren, aber von einer statischen procedure/function mehrere Instanzen zu erzeugen, ist in Hochsprachen allgemein nicht vorgesehen. (PS: Ich irre mich des öfteren)

Dafür sind ja Methoden und damit Klassen da. In C# gibt es auch Klassen, die im Prinzip nur eine Methode bieten (z.B. Comparer), aber evtl. bietet es sich ja an, die Funktion der Procedure gleich zusammen mit den anderen Aufgaben der Aktion in eine Thread-Klasse zu packen.

Phoenix 24. Sep 2010 13:03

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

Zitat von Digielm (Beitrag 1051675)
ich hab eine Frage zu Delphi 2007.net.

Erstmal mein ehrliches, herzliches Beileid.

Zitat:

Zitat von Digielm (Beitrag 1051675)
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.

Zitat:

Zitat von Digielm (Beitrag 1051675)
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.


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