Fragen zum Ablauf eines erstellten Objectes ...
-
Hi,
hab die Frage zwar schon in etwa so gestellt, aber leider konnte mir
noch keiner eine genau Angabe machen.Ich erstelle mit CreateDevice ein Object, das ich jederzeit mit seinen
Unterfunktionen verwenden kann. Wenn jetzt das Programm geschlossen wird
geht man normalerweise nicht her und deleted das Objekt per Hand.
Fast jedes Object das ich kenne hat aber 3 Interfacefunktionen,
QueryInterface, Release und AddRef.Jetzt meine Frage:
Wird beim Schließen eines Fensters nun eine Art Standartroutine aufgerufen,
die sich vorher alle erstellten Objecte gemerkt hat und diese nun einzeln per
Release Aufruf korrekt entfernt, oder geschiet dies anderst ?Bei der Funktion Release steht übrigens meistens in der MSN:
Decreases the reference count of the interface by 1.
Returns the new reference count. This value is for diagnostic and testing purposes only.Da wäre doch die Frage nahe, wie das mit der Referenz geht ?
Eine ReferenzID ist doch fest und wird eigentlich nicht verkleinert ?
-
Afaik wird da nichts automatisch aufgerufen. Und der Wert ist nicht die Referenz-ID, sondern eine Referenz-Zähler, der zählt, wie viele Referenzen erstellt wurden

-
Heisst das nun, das der Speicherplatz ohne ein vorheriges aufrufen
der Release Funktion noch offen bleibt, also quasi ein Speicherloch
entsteht ? Wie macht ihr das ? mach ihr nun ein Release ?
-
Also der Speicher innerhalb deines Prozess sollte schon freigegeben werden - nur wenn eben beim Release mehr geschieht, als nur den Speicher freizugeben, dann solltest du die Funktion schon aufrufen - denke ich mal

-
ich schreib das ja auch nur, weil ich in d3d Technik immer sehe, das ein
Objekt erzeugt wird und immer dannach 100% released werden muss.
Wenn ich nun in Direct Draw einige Objekte erzeuge und diese Pointer auf die
Objekte im DirectDrawCode nicht mehr gelöscht werden, müsste das nach einiger Zeit
recht langsam werden.
Aber ich dachte, das das hier bekannt wäre. Nachdem dies nicht so ist, scheint
es wohl auch nicht so zu sein.
-
thenoname schrieb:
Wenn ich nun in Direct Draw einige Objekte erzeuge und diese Pointer auf die Objekte im DirectDrawCode nicht mehr gelöscht werden, müsste das nach einiger Zeit recht langsam werden.
Ich hatte mich nur darauf bezogen, dass Speicher beim Beenden des Prozesses wieder freigegeben werden sollte - zur Laufzeit sieht das natürlich anders aus (da wird dann sicher nur das freigegeben, was du explizit freigibst)
thenoname schrieb:
Aber ich dachte, das das hier bekannt wäre. Nachdem dies nicht so ist, scheint es wohl auch nicht so zu sein.
Bisher hast du ja nur meine sehr ungewissen Informationen (auf die du dich nicht verlassen solltest, da ich fast keine praktische WinAPI-Programier-Erfahrung habe)