Partager via


Interface IClosable (windows.foundation.h)

Définit une méthode pour libérer des ressources allouées.

Héritage

L’interface IClosable hérite de l’interface IInspectable. IClosable possède également les types de membres suivants :

Méthodes

L’interface IClosable possède ces méthodes.

 
IClosable ::Close

Effectue des tâches définies par l’application associées à la libération, à la libération ou à la réinitialisation des ressources allouées.

Remarques

Utilisez l’interface IClosable pour gérer la durée de vie des ressources système, telles que les handles de fichiers et les sockets réseau, qui sont utilisées par un objet Windows Runtime.

Certaines ressources système sont utilisées exclusivement par un seul élément de code et doivent être libérées avant qu’un autre code puisse les utiliser. Par exemple, l’ouverture d’un fichier pour l’accès en lecture/écriture empêche d’autres codes d’ouvrir le même fichier pour l’accès en lecture/écriture. Par conséquent, le code qui a ouvert le fichier doit fermer le handle de fichier avant qu’un autre code puisse l’ouvrir.

Les autres ressources système ne sont pas utilisées de façon exclusive. De nombreux appareils matériels, tels que les capteurs, la géolocalisation, les SMS et les appareils portables, peuvent être ouverts plusieurs fois au sein d’une même application ou par plusieurs applications.

L’interface IClosable permet de gérer les ressources système à usage exclusif. Lorsque vous appelez la méthode Close sur un objet Windows Runtime, l’objet libère ses ressources système afin qu’elles soient disponibles pour qu’un autre code puisse être utilisé. Les objets qui utilisent uniquement des ressources système partagées, comme la mémoire et les appareils partageables, n’implémentent pas IClosable.

Lorsque vous implémentez la méthode Close dans un objet Windows Runtime, votre code doit libérer toutes les ressources à usage exclusif qu’il contient. Si l’objet a des références à d’autres objets Windows Runtime pouvant être fermés, il doit appeler Close sur les objets avant qu’ils ne soient libérés. En outre, votre code doit libérer d’autres ressources, telles que des références à d’autres objets Windows Runtime et COM (Component Object Model), et des ressources système non exclusives telles que des mémoires tampons.

L’appel de la méthode Close sur un objet laisse l’objet en mémoire, mais l’objet ne dispose plus des ressources système dont il a besoin pour fonctionner correctement. Les membres qui dépendent des ressources système libérées doivent retourner RO_E_CLOSED pour indiquer que l’objet est fermé et que ces membres ne fonctionnent plus.

Les méthodes définies par les interfaces IUnknown et IInspectable doivent continuer à fonctionner normalement après l’appel de Close .

L’appel de Close sur un objet déjà fermé n’a aucun effet et retourne S_OK.

En règle générale, vos objets suivent leur état fermé en définissant un indicateur booléen lorsque Close est appelé, ou en vérifiant la valeur Null ou une autre valeur sentinelle dans les ressources conservées.

Les objets n’ont pas besoin de synchroniser l’accès à la méthode Close . Cela signifie que des conditions de concurrence sont possibles dans lesquelles un thread appelle Close sur un objet tandis qu’un autre thread utilise l’objet. Dans ce cas, il est possible d’obtenir une erreur autre que RO_E_CLOSED, mais vous devez vous assurer que l’objet ne provoque pas de violation d’accès.

La méthode Close ne bloque pas en attendant la fin des opérations asynchrones. Par conséquent, les ressources système sous-jacentes peuvent ne pas être complètement libérées lorsque la méthode Close est retournée. Pour garantir une fermeture déterministe, l’appelant doit attendre que toutes les opérations asynchrones se terminent ou s’annulent. Les objets doivent terminer la libération de leurs ressources système aussi rapidement que possible en cas d’opérations asynchrones en suspens, mais ne doivent pas se bloquer en attendant que celles-ci se terminent.

Si votre objet closeable Windows Runtime expose une ressource à usage exclusif à d’autres objets, il doit fournir un moyen d’affecter la sémantique de propriété de tous les objets pouvant être fermés qu’elle contient. Par exemple, la classe DataReader fournit une méthode DetachStream qui retourne le IInputStream qu’elle a reçu lors de sa création. Lorsque DetachStream est appelé, le DataReader n’est plus le propriétaire de L’IInputStream. Par conséquent, le DataReader n’appelle pas Close sur IInputStream.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 8
Serveur minimal pris en charge Windows Server 2012
Plateforme cible Windows
En-tête windows.foundation.h