IClosable-Schnittstelle (windows.foundation.h)
Definiert eine Methode für die Freigabe reservierter Ressourcen.
Vererbung
Die IClosable-Schnittstelle erbt von der IInspectable-Schnittstelle . IClosable verfügt auch über folgende Arten von Membern:
Methoden
Die IClosable-Schnittstelle verfügt über diese Methoden.
IClosable::Close Führt anwendungsdefinierte Aufgaben im Zusammenhang mit dem Freigeben, Freigeben oder Zurücksetzen zugeordneter Ressourcen aus. |
Hinweise
Verwenden Sie die IClosable-Schnittstelle, um die Lebensdauer von Systemressourcen wie Dateihandles und Netzwerksockets zu verwalten, die von einem Windows-Runtime-Objekt verwendet werden.
Einige Systemressourcen werden ausschließlich von einem einzelnen Codeteil verwendet und müssen freigegeben werden, bevor sie von anderen Code verwendet werden können. Wenn Sie beispielsweise eine Datei für den Lese-/Schreibzugriff öffnen, wird verhindert, dass anderer Code dieselbe Datei für den Lese-/Schreibzugriff öffnet, sodass der Code, der die Datei geöffnet hat, das Dateihandle schließen muss, bevor es von einem anderen Code geöffnet werden kann.
Andere Systemressourcen werden nicht exklusiv verwendet. Viele Hardwaregeräte wie Sensoren, Geolocation, SMS und tragbare Geräte können mehrmals innerhalb derselben App oder von mehreren Apps geöffnet werden.
Die IClosable-Schnittstelle ermöglicht die Verwaltung exklusiv verwendeter Systemressourcen. Wenn Sie die Close-Methode für ein Windows-Runtime -Objekt aufrufen, gibt das Objekt seine Systemressourcen frei, sodass sie für anderen Code verfügbar sind. Objekte, die nur freigegebene Systemressourcen verwenden, z. B. Arbeitsspeicher und gemeinsam nutzbare Geräte, implementieren IClosable nicht.
Wenn Sie die Close-Methode in einem Windows-Runtime-Objekt implementieren, muss Ihr Code alle ressourcen, die ausschließlich verwendet werden, freigeben, die er enthält. Wenn das Objekt Verweise auf andere nahbare Windows-Runtime -Objekte aufweist, muss es Close für die -Objekte aufrufen, bevor sie freigegeben werden. Außerdem muss Ihr Code andere Ressourcen freigeben, z. B. Verweise auf andere Windows-Runtime- und COM-Objekte (Component Object Model) und nicht exklusive Systemressourcen wie Speicherpuffer.
Beim Aufrufen der Close-Methode für ein Objekt verbleibt das Objekt im Arbeitsspeicher, aber das Objekt verfügt nicht mehr über die Systemressourcen, die es für die ordnungsgemäße Funktion benötigt. Member, die von freigegebenen Systemressourcen abhängen, müssen RO_E_CLOSED zurückgeben, um anzugeben, dass das Objekt geschlossen ist und dass diese Member nicht mehr funktionieren.
Methoden, die von den Schnittstellen IUnknown und IInspectable definiert werden, müssen nach dem Aufruf von Close weiterhin normal funktionieren.
Das Aufrufen von Close für ein objekt, das bereits geschlossen ist, hat keine Auswirkung und gibt S_OK zurück.
In der Regel verfolgen Ihre Objekte ihren geschlossenen Zustand, indem sie beim Aufrufen von Close ein boolesches Flag festlegen oder gehaltene Ressourcen auf NULL oder einen anderen Sentinelwert überprüfen.
Objekte müssen den Zugriff auf die Close-Methode nicht synchronisieren. Dies bedeutet, dass Racebedingungen möglich sind, bei denen ein Thread Close für ein Objekt aufruft, während ein anderer Thread das -Objekt verwendet. In diesem Fall ist es möglich, einen anderen Fehler als RO_E_CLOSED zu erhalten, aber Sie müssen sicherstellen, dass das Objekt keine Zugriffsverletzung verursacht.
Die Close-Methode wird nicht blockiert, während auf den Abschluss asynchroner Vorgänge gewartet wird. Daher werden die zugrunde liegenden Systemressourcen möglicherweise nicht vollständig freigegeben, wenn die Close-Methode zurückgibt. Um das deterministische Schließen sicherzustellen, muss der Aufrufer warten, bis alle asynchronen Vorgänge abgeschlossen oder abgebrochen wurden. Objekte müssen ihre Systemressourcen angesichts ausstehender asynchroner Vorgänge so schnell wie möglich freigeben, dürfen aber nicht blockieren, während sie darauf warten, dass diese abgeschlossen sind.
Wenn ihr nahbares Windows-Runtime -Objekt eine Ressource mit exklusiver Verwendung für andere Objekte verfügbar macht, muss es eine Möglichkeit bieten, die Besitzsemantik aller abschließbaren Objekte zu beeinflussen, die es enthält. Die DataReader-Klasse stellt beispielsweise eine DetachStream-Methode bereit, die den IInputStream zurückgibt, den sie bei der Erstellung erhalten hat. Wenn DetachStream aufgerufen wird, ist der DataReader nicht mehr der Besitzer des IInputStream, sodass der DataReader nicht Close für IInputStream aufruft.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 8 |
Unterstützte Mindestversion (Server) | Windows Server 2012 |
Zielplattform | Windows |
Kopfzeile | windows.foundation.h |