Freigeben über


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 für jedes Objekt nicht 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. Sobald jede Anwendung das Ereignis verwendet, wird das Handle für das Objekt geschlossen. Wenn keine verbleibenden offenen 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. Beispielsweise könnte ein Thread 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 im Arbeitsspeicher, ohne Ereignisobjekthandles, 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. Um die Systemleistung zu erhalten, sollten Sie daher Handles schließen und Objekte löschen, sobald sie nicht mehr benötigt werden. Wenn Sie dies nicht tun, kann Ihre Anwendung die Systemleistung beeinträchtigen, aufgrund der übermäßigen Verwendung der Auslagerungsdatei.

Wenn ein Prozess beendet wird, schließt das System automatisch Handles und löscht objekte, die vom Prozess erstellt wurden. 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-Unterhaltungsobjekte (Dynamic Data Exchange). Diese Objekte werden zerstört, wenn der Erstellungsthread beendet wird.