Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

  • »Johannes Schneider« ist der Autor dieses Themas

Beiträge: 103

Beruf: Chemiestudent

  • Private Nachricht senden

1

15.07.2010, 14:18

Was passiert mit meinem "Müll"

Hallo erstmal.

Was passiert eigentlich mit COM (IID_IDirectInput8..) Schnittstellen, welche erzeugt wurden und dann aus "Schlamperei" nicht mit Release() usw. Heruntergefahren wurden ?
"Das Glück des Forschers besteht nicht darin, die Wahrheit zu besitzen, sondern eine Wahrheit zu erringen. Und in diesem fortschreitendem, erfolgreichen Suchen nach der Wahrheit - darin liegt die
eigentliche Befriedigung." Max Planck

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

2

15.07.2010, 16:09

Nichts Gutes ;)

Manchmal kann es einfach sein, dass nix schlimmeres passiert, evtl. sind die sogar Memorymanaged...

Aber es kann (je nachdem) auch zu (System-/Treiber-)abstürzen kommen...

Kleiner Tipp: RAII verwenden, dann brauchst du dich nichtmal um Release() kümmern ;) Die std::tr1 bzw. boost stellt hierfür auch geeignete Interfaces bereit.

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

3

16.07.2010, 11:38

Normalerweise wird einfach alles was zu deinem Prozess gehoerte, weggeschmissen und aufgeraeumt. Denn dein Prozess soll ja normalerweise keine Auswirkung auf andere Prozesse haben duerfen. Passiert das doch, ist es normalerweise in Bug in Treiber o.ae.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

16.07.2010, 13:37

Der Treiber hat ja aber mit der Anwendung nichts zu tun. Wenn die Anwendung den Treiber lädt, ihn in einen 'komischen' Zustand versetzt (z.B. "Setze Pin X dauerhaft auf 1") und sich dann beendet, dann bekommt der Treiber das nicht mal mit.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

5

16.07.2010, 14:14

Die einzige Moeglichkeit wie ein Prozess nach dem Beenden noch auf das System einwirken kann (ausser irgendwas permanent auf HD zu speichern) waere einen anderen Prozess zu veraendern, halt z.b. einen Treiberprozess. Dann passiert z.b. sowas wie hier: http://www.computerhilfen.de/hilfen-4-170404-0.html
Also theoretisch koennte es sein, das man z.b. DXInput nicht ordentlich abmeldet dann Tastatur oder Maus nicht mehr korrekt passiert, weil eben der Treiber sich nicht korrekt resettet und sich das "Setze Pin X dauerhaft auf 1" doch merkt.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

16.07.2010, 14:40

Darauf wollte ich hinaus. Passieren kann viel, gerade bei Treibern. Bei Verwendung von DirectX aber unwahrscheinlich.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

unsigned long

Treue Seele

Beiträge: 140

Wohnort: Herzogenrath

Beruf: Fachinformatiker Fachrichtung Anwendungsentwicklung

  • Private Nachricht senden

7

20.07.2010, 13:18

Leute, ihr müsst nicht nur an den Treiber denken. Es gibt ja noch den COM-Server die die ganzen Resourcen verwaltet. Die Anwendung verwaltet zwar die Zeiger, aber nicht die eigentlichen Resourcen die dann zum Treiber gereicht werden. Das ist der COM-Server. Sollte der nicht durch Release(); informiert werden, bleibt der Zugriff bestehen bis zum Server-Restart. COM-Clients wie DirectX kommunizieren über den COM-Server zu dem Treiber, ist der COM-Client weg, ist das beim Server aber noch lange nicht.

Dieses Problem wird (leider) in fast jedem Buch/Tutorial links liegen gelassen. In den COM-Büchern von Microsoft Press wird dieses Verhalten und der Aufbau von COM im Detail durchleuchtet.

Drum bitte bitte bitte, teilt dem COM-Server über AddRef(); und Relase(); den Status der Resource mit. Ihr reißt euch sonst Löcher in den Resourcen-Manager so groß wie Australien und noch Sicherheitslücken dazu.
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.'
[ bing | not'a'tric | germangamedev | Fragen richtig stellen ]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »unsigned long« (20.07.2010, 13:23)


TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

8

20.07.2010, 14:38

Genau, und sobald mal irgendein Prozess abstuerzt oder mitm Taskmanager beendet wird, fliegt das ganze Com-System auseinander...

unsigned long

Treue Seele

Beiträge: 140

Wohnort: Herzogenrath

Beruf: Fachinformatiker Fachrichtung Anwendungsentwicklung

  • Private Nachricht senden

9

20.07.2010, 14:39

TGGC
Darf man Fragen wie du auf solch einen Unsinn kommst?
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.'
[ bing | not'a'tric | germangamedev | Fragen richtig stellen ]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

20.07.2010, 14:59

Nun, Direct3D wird sicherlich ein InProcess Server sein, folgedessen ist anzunehmen dass auch Direct3D Ressourcen beim Beenden korrekt aufgeräumt werden. Sauberer Code allerdings verlässt sich nicht darauf dass das OS eh aufräumt sondern sorgt dafür dass er seinen Müll selber korrekt recycled.

Werbeanzeige