2010-12-04 4 views
0

Ich führe einen Prozess, der eine Datei erstellt und diese Datei verwendet. Nach dem Ende dieses Prozesses lösche ich diese Datei.Wie werden alle Ressourcen für einen Prozess freigegeben?

Wenn dazwischen eine Ausnahme auftritt, dann wissen Sie, wie die Datei vom Prozess freigegeben wird und wie sie gelöscht wird, wenn sie vom Prozess gesperrt wird.

Vielen Dank für jede Hilfe :)

+0

Mit "Prozess" meinen Sie eigentlich einen Methodenaufruf oder einen Thread innerhalb eines einzelnen Programms? – IanNorton

+0

Nein, kein Methodenaufruf, es ist eine EXE-Datei, die von einem Prozess aufgerufen wird. –

Antwort

1

Wenn der Prozess unter Windows beendet wird, gibt das Betriebssystem automatisch alle Ressourcen zurück, die diesem Prozess gehören. Ende der Geschichte.

Angenommen, Sie haben "CreateFileMapping()" für jeden der beiden Prozesse verwendet, um ein Speichersegment freizugeben. Wenn der erste Prozess beendet wird, dekrementiert Windows den Verwendungszähler und nur der überlebende Prozess kann das Objekt weiterhin verwenden. Wenn der zweite Prozess eine "CloseHandle()" ausführt (oder selbst austritt), wird der Zähler auf Null dekrementiert, und das Objekt wird vollständig freigegeben.

Mit anderen Worten, Windows wird die Ressource zurückfordern, wenn es nicht mehr verwendet wird, ob die Prozesse ordnungsgemäß nach sich selbst bereinigen oder nicht.

Und nein, auch wenn Sie eine Datei für den exklusiven Zugriff öffnen, wird die Datei selbst nicht "gesperrt", sobald das Dateihandle geschlossen ist (und Windows schließt es automatisch, wenn das Programm beendet wird).

+0

Wenn der Prozess nicht ordnungsgemäß beendet wird und durch eine Ausnahme oder etwas beendet wird, ob die Ressourcen freigegeben werden? –

+0

paulsm4's Antwort deckt das mit dem letzten Satz ab; Windows schließt es, wenn das Programm beendet wird. –

0

Wenn Ihr Programm endet - egal mit welchen Mitteln - die Datei, wenn es noch vorhanden ist, wird nicht mehr durch den Prozess gesperrt werden ..., weil der Prozess existiert nicht .

Aber ich muss mich wundern; Wenn die Datei am Ende sowieso gelöscht wird, müssen Sie wirklich eine Datei an erster Stelle erstellen?

+0

Ich erstelle die Datei mit etwas Inhalt, benutze sie dann und nachdem ich sie benutzt habe, lösche ich sie. Dann noch einmal auf einer anderen Anfrage ich erstelle eine weitere Datei. Die Datei kann nicht geteilt werden. Wenn mehrere Benutzer sie verwenden, muss ich mehrere Dateien erstellen. –

+0

Was Sie beschreiben, klingt wie etwas, wo Sie überhaupt keine Datei benötigen. Eine Datei ist normalerweise etwas, das * in irgendeiner Weise geteilt werden muss. Wenn die Daten nur für einen einzigen, kurzlebigen Kontext benötigt werden, ist der Speicher wahrscheinlich besser (es sei denn, es handelt sich um eine sehr große Datenmenge). Aber der Rest meiner Antwort gilt immer noch; Sobald der Prozess beendet ist, wird die Datei nicht mehr gesperrt. Also lösche es einfach so oder so. –

Verwandte Themen