Compartilhar via


Interface IClosable (windows.foundation.h)

Define um método para recursos de versão alocado.

Herança

A interface IClosable herda da interface IInspectable . O IClosable também tem estes tipos de membros:

Métodos

A interface IClosable tem esses métodos.

 
IClosable::Close

Executa tarefas definidas pelo aplicativo associadas à liberação, liberação ou redefinição de recursos alocados.

Comentários

Use a interface IClosable para gerenciar o tempo de vida dos recursos do sistema, como identificadores de arquivo e soquetes de rede, que são usados por um objeto Windows Runtime.

Alguns recursos do sistema são usados exclusivamente por uma única parte do código e devem ser liberados antes que outro código possa usá-los. Por exemplo, abrir um arquivo para acesso de leitura/gravação impede que outro código abra o mesmo arquivo para acesso de leitura/gravação, portanto, o código que abriu o arquivo deve fechar o identificador de arquivo antes que outro código possa abri-lo.

Outros recursos do sistema não são de uso exclusivo. Muitos dispositivos de hardware, como sensores, geolocalização, SMS e dispositivos portáteis, podem ser abertos várias vezes dentro do mesmo aplicativo ou por vários aplicativos.

A interface IClosable permite o gerenciamento de recursos do sistema de uso exclusivo. Quando você chama o método Close em um objeto Windows Runtime, o objeto libera seus recursos do sistema para que eles estejam disponíveis para outro código usar. Objetos que usam apenas recursos compartilhados do sistema, como memória e dispositivos compartilháveis, não implementam IClosable.

Quando você implementa o método Close em um objeto Windows Runtime, seu código deve liberar todos os recursos de uso exclusivo que ele contém. Se o objeto tiver referências a outros objetos Windows Runtime próximos, ele deverá chamar Close nos objetos antes de serem liberados. Além disso, seu código deve liberar outros recursos, como referências a outros objetos Windows Runtime e COM (Component Object Model) e recursos não exclusivos do sistema, como buffers de memória.

Chamar o método Close em um objeto deixa o objeto na memória, mas o objeto não tem mais os recursos do sistema necessários para funcionar corretamente. Os membros que dependem dos recursos liberados do sistema devem retornar RO_E_CLOSED para indicar que o objeto está fechado e que esses membros não funcionam mais.

Os métodos definidos pelas interfaces IUnknown e IInspectable devem continuar funcionando normalmente depois que Close for chamado.

Chamar Close em um objeto que já está fechado não tem efeito e retorna S_OK.

Normalmente, seus objetos rastreiam seu estado fechado definindo um sinalizador booliano quando Close é chamado ou verificando os recursos mantidos quanto a um valor nulo ou outro valor sentinela.

Os objetos não precisam sincronizar o acesso ao método Close . Isso significa que as condições de corrida são possíveis em que um thread chama Close em um objeto enquanto outro thread está usando o objeto . Nesse caso, é possível obter um erro diferente de RO_E_CLOSED, mas você deve garantir que o objeto não cause uma violação de acesso.

O método Close não é bloqueado enquanto aguarda a conclusão das operações assíncronas. Portanto, os recursos subjacentes do sistema podem não ser completamente liberados quando o método Close retorna. Para garantir o fechamento determinístico, o chamador deve aguardar a conclusão ou o cancelamento de todas as operações assíncronas. Os objetos devem concluir a liberação de seus recursos do sistema o mais rápido possível diante de operações assíncronas pendentes, mas não devem ser bloqueados enquanto aguardam a conclusão deles.

Se o objeto de Windows Runtime que pode ser fechado expõe um recurso de uso exclusivo a outros objetos, ele deverá fornecer uma maneira de afetar a semântica de propriedade de quaisquer objetos que ele contenha. Por exemplo, a classe DataReader fornece um método DetachStream que retorna o IInputStream que recebeu quando foi criado. Quando DetachStream é chamado, o DataReader não é mais o proprietário do IInputStream, portanto, o DataReader não chama Close no IInputStream.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 8
Servidor mínimo com suporte Windows Server 2012
Plataforma de Destino Windows
Cabeçalho windows.foundation.h