Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Mehrere Instanzen, aber Identische TempDaten vermeiden. (https://www.delphipraxis.net/185942-mehrere-instanzen-aber-identische-tempdaten-vermeiden.html)

Bjoerk 20. Jul 2015 21:10


Mehrere Instanzen, aber Identische TempDaten vermeiden.
 
Ich hab ein Programm, das besteht aus mehren Apps, die hintereinander gestartet werden. Die erste App ist die Oberfläche, wo der Anwender die Daten eingibt. Die letzte App ist die Darstellung der Ergebnisses. Im Verlauf der Berechnung werden umfangreiche TempDaten angelegt die jeweils von den NachfolgeApp‘s benötigt werden. Die TempDaten werden anhand des OpenDialog.FileName‘s von App1 gesetzt. App1 starte auch die weiteren Apps.

Beispiel:
FileName: C:\Users\Thomas\Documents\Abel\Beispiel\Test.stw
TempDaten C:\ProgramData\Abel\Temp\Users_Toni_Documents_Abel _Beispiel_Test_stw.tmp

Wie macht man das nun, wenn der User zum Beispiel das gleiche Programm mit dem gleichen FileName ausführt? Die TempDaten der 1.Instanz müssen dabei erhalten bleiben weil die Ergbnisdarstellung zur Laufzeit darauf zugreift. Ein Instanzzähler bringt da also wohl nichts?

Jemand eine Idee?

redox 20. Jul 2015 21:41

AW: Mehrere Instanzen, aber Identische TempDaten vermeiden.
 
if FileExists(OpenDialog.FileName) then Fehlermeldung?

Sir Rufo 20. Jul 2015 23:04

AW: Mehrere Instanzen, aber Identische TempDaten vermeiden.
 
MSDN-Library durchsuchenGetTempFileName

hoika 21. Jul 2015 04:46

AW: Mehrere Instanzen, aber Identische TempDaten vermeiden.
 
Hallo,
das ist mir etwas unverständlich.
Wieso sind das verschiedene Apps, warum nicht ein Programm?

Was passiert denn, wenn der "User" App2 startet, wenn App1 noch gar nicht mit der Berechnung fertig ist?

Wenn du das beibehalten willst, solltest du vielleicht verhindern, das App2
überhaupt einfach so gestartet wird, z.B. durch Übergabe eines Parameters.
Nur, wenn App2 mit Parameter gestartet wird, macht sie etwas sinnvolles.

Heiko

Bjoerk 21. Jul 2015 12:49

AW: Mehrere Instanzen, aber Identische TempDaten vermeiden.
 
Ob Instanzen von Klassen oder Apps ist für diese Problem unerheblich. Vielleicht nochmal zum besseren Verständnis. Es gibt ca. 200 Apps. Davon sind für den User ca. 80 sichtbar. Nennen wir diese Apps1. Der User kann diese 80 Apps1 querbeet ausführen. Das ist kein Problem weil sich die TempDatenFileNames jeweils unterscheiden. Einzige Ausnahme. Dieselbe App1 wird mehrfach mit derselben Datei ausgeführt. Wie macht das denn z.B. Word?

Sir Rufo 21. Jul 2015 12:55

AW: Mehrere Instanzen, aber Identische TempDaten vermeiden.
 
Jede Anwendungs-Instanz erzeugt sich eine temp. Datei und gibt diesen Dateinamen an die daran folgenden Instanzen weiter.

Jetzt kannst du die Anwendungen starten wie du lustig bist, weil du nicht mehr an den Namen der Ursprungsdatei gekettet bis.

p80286 21. Jul 2015 12:59

AW: Mehrere Instanzen, aber Identische TempDaten vermeiden.
 
Zitat:

Zitat von Bjoerk (Beitrag 1309376)
Ob Instanzen von Klassen oder Apps ist für diese Problem unerheblich. Vielleicht nochmal zum besseren Verständnis. Es gibt ca. 200 Apps. Davon sind für den User ca. 80 sichtbar. Nennen wir diese Apps1. Der User kann diese 80 Apps1 querbeet ausführen. Das ist kein Problem weil sich die TempDatenFileNames jeweils unterscheiden. Einzige Ausnahme. Dieselbe App1 wird mehrfach mit derselben Datei ausgeführt. Wie macht das denn z.B. Word?

liest sich wie Chaos pur.........
Word blockiert die geöffnete Datei, jeder weitere Versuch des Öffnens wird mir "readonly" bestraft.

Gruß
K-H

Bjoerk 21. Jul 2015 13:15

AW: Mehrere Instanzen, aber Identische TempDaten vermeiden.
 
Nein, kein Chaos. Diese Dateien werden auch wieder sauber entfernt. Mal ne Statik unter Zeitdruck gemacht? Da hat man so 10 Apps gleichzeitig offen, völlig normal..

Sir Rufo, als Parameter ginge natürlich. Dann kann ich auch ggf. besser einen SubPath mitschicken, wäre vermutlich dann einfacher. Wollte eigentlich nur wissen ob es da evtl. einen speziellen Trick bei gibt.. Thanx!

jaenicke 21. Jul 2015 13:58

AW: Mehrere Instanzen, aber Identische TempDaten vermeiden.
 
Du kannst beim Starten einer zweiten Anwendung auch einfach das schon geöffnete Handle zu der Datei mitgeben, wenn du bei CreateProcess InheritHandles auf True gesetzt hast. Wenn du dazu noch eine MMF benutzt, brauchst du gar keine temporären Dateien mehr. Und sobald das letzte Handle geschlossen ist, wird der Speicherbereich automatisch aufgeräumt.

Du kannst auch eine benannte MMF benutzen, dann kannst du statt des Handles auch deren Namen weitergeben.

Einziger Fallstrick: Beim Start der nächsten Anwendung musst du sicherstellen, dass diese das Handle auch schon geöffnet hat, damit es nicht zu früh aufgeräumt wird.


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