Objektschnittstelle

Windows stellt Funktionen bereit, die die folgenden Aufgaben ausführen:

  • Erstellen eines Objekts
  • Abrufen eines Objekthandles
  • Abrufen von Informationen zum Objekt
  • Festlegen von Informationen zum Objekt
  • Schließen des Objekthandles
  • Zerstören des Objekts

Einige dieser Aufgaben sind nicht für jedes Objekt erforderlich. Einige dieser Aufgaben werden für bestimmte Objekte kombiniert. Beispielsweise kann eine Anwendung ein Ereignisobjekt erstellen. Andere Anwendungen können das Ereignis öffnen, um ein eindeutiges Handle für dieses Ereignisobjekt abzurufen. Wenn jede Anwendung die Verwendung des -Ereignisses abgeschlossen hat, schließt sie ihr Handle für das -Objekt. Wenn keine verbleibenden geöffneten Handles für das Ereignisobjekt vorhanden sind, zerstört das System das Ereignisobjekt. Im Gegensatz dazu kann eine Anwendung ein Handle für ein vorhandenes Fensterobjekt abrufen. Wenn das Fensterobjekt nicht mehr benötigt wird, muss die Anwendung das Objekt zerstören, wodurch das Fensterhandle ungültig wird.

Gelegentlich verbleibt ein Objekt im Arbeitsspeicher, nachdem alle Objekthandles geschlossen wurden. Ein Thread könnte beispielsweise ein Ereignisobjekt erstellen und auf das Ereignishandle warten. Während der Thread wartet, könnte ein anderer Thread dasselbe Ereignisobjekthandle schließen. Das Ereignisobjekt verbleibt ohne Ereignisobjekthandles im Arbeitsspeicher, bis das Ereignisobjekt auf den signalierten Zustand festgelegt ist und der Wartevorgang abgeschlossen ist. Zu diesem Zeitpunkt entfernt das System das Objekt aus dem Arbeitsspeicher.

Handles und Objekte verbrauchen Arbeitsspeicher. Daher sollten Sie Handles schließen und Objekte löschen, sobald sie nicht mehr benötigt werden, um die Systemleistung zu erhalten. Wenn Sie dies nicht tun, kann ihre Anwendung aufgrund der übermäßigen Verwendung der Auslagerungsdatei die Systemleistung beeinträchtigen.

Wenn ein Prozess beendet wird, schließt das System automatisch Handles und löscht vom Prozess erstellte Objekte. Wenn ein Thread jedoch beendet wird, schließt das System in der Regel keine Handles oder löscht Objekte. Die einzigen Ausnahmen sind Fenster-, Hook-, Fensterpositions- und DDE-Konversationsobjekte (Dynamic Data Exchange). diese Objekte werden zerstört, wenn der erstellenden Thread beendet wird.