Interfaz IClosable (windows.foundation.h)
Define un método para liberar los recursos asignados.
Herencia
La interfaz IClosable hereda de la interfaz IInspectable . IClosable también tiene estos tipos de miembros:
Métodos
La interfaz IClosable tiene estos métodos.
IClosable::Close Realiza tareas definidas por la aplicación asociadas con la liberación, liberación o restablecimiento de recursos asignados. |
Comentarios
Use la interfaz IClosable para administrar la duración de los recursos del sistema, como identificadores de archivos y sockets de red, que usa un objeto Windows Runtime.
Algunos recursos del sistema se usan exclusivamente mediante un solo fragmento de código y deben liberarse antes de que otros código puedan usarlos. Por ejemplo, abrir un archivo para el acceso de lectura y escritura impide que otro código abra el mismo archivo para el acceso de lectura y escritura, por lo que el código que abrió el archivo debe cerrar el identificador de archivo antes de que otro código pueda abrirlo.
Otros recursos del sistema no son de uso exclusivo. Muchos dispositivos de hardware, como sensores, geolocalización, SMS y dispositivos portátiles se pueden abrir varias veces dentro de la misma aplicación o varias aplicaciones.
La interfaz IClosable permite administrar recursos del sistema de uso exclusivo. Cuando se llama al método Close en un objeto Windows Runtime, el objeto libera sus recursos del sistema para que estén disponibles para que otros código los usen. Los objetos que solo usan recursos compartidos del sistema, como la memoria y los dispositivos que se pueden compartir, no implementan IClosable.
Al implementar el método Close en un objeto Windows Runtime, el código debe liberar todos los recursos de uso exclusivo que contiene. Si el objeto tiene referencias a otros objetos de Windows Runtime que se pueden cerrar, debe llamar a Close en los objetos antes de que se liberen. Además, el código debe liberar otros recursos, como referencias a otros objetos Windows Runtime y modelo de objetos componentes (COM) y recursos del sistema no exclusivos, como búferes de memoria.
Llamar al método Close en un objeto deja el objeto en memoria, pero el objeto ya no tiene los recursos del sistema que necesita para funcionar correctamente. Los miembros que dependen de los recursos del sistema liberados deben devolver RO_E_CLOSED para indicar que el objeto está cerrado y que estos miembros ya no funcionan.
Los métodos definidos por las interfaces IUnknown e IInspectable deben seguir funcionando normalmente después de llamar a Close .
Llamar a Close en un objeto que ya está cerrado no tiene ningún efecto y devuelve S_OK.
Normalmente, los objetos realizan un seguimiento de su estado cerrado estableciendo una marca booleana cuando se llama a Close o comprobando los recursos mantenidos para un valor NULL u otro valor de Sentinel.
Los objetos no necesitan sincronizar el acceso al método Close . Esto significa que las condiciones de carrera son posibles en las que un subproceso llama a Close en un objeto mientras otro subproceso usa el objeto . En este caso, es posible obtener un error distinto de RO_E_CLOSED, pero debe asegurarse de que el objeto no provoca una infracción de acceso.
El método Close no se bloquea mientras espera a que se completen las operaciones asincrónicas. Por lo tanto, es posible que los recursos del sistema subyacentes no se libere completamente cuando el método Close devuelva. Para garantizar el cierre determinista, el autor de la llamada debe esperar a que todas las operaciones asincrónicas se completen o cancelen. Los objetos deben completar la liberación de sus recursos del sistema lo antes posible en el caso de operaciones asincrónicas pendientes, pero no deben bloquearse mientras esperan a que se completen.
Si el objeto de Windows Runtime que se puede cerrar expone un recurso de uso exclusivo a otros objetos, debe proporcionar una manera de afectar a la semántica de propiedad de cualquier objeto que se pueda cerrar que contenga. Por ejemplo, la clase DataReader proporciona un método DetachStream que devuelve el IInputStream que recibió cuando se creó. Cuando se llama a DetachStream , DataReader ya no es el propietario de IInputStream, por lo que DataReader no llama a Close en IInputStream.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 8 |
Servidor mínimo compatible | Windows Server 2012 |
Plataforma de destino | Windows |
Encabezado | windows.foundation.h |