Interface do objeto

O Windows fornece funções que executam as seguintes tarefas:

  • Criar um objeto
  • Obter um identificador de objeto
  • Obter informações sobre o objeto
  • Definir informações sobre o objeto
  • Fechar o identificador do objeto
  • Destruir o objeto

Algumas dessas tarefas não são necessárias para cada objeto. Algumas dessas tarefas são combinadas para determinados objetos. Por exemplo, um aplicativo pode criar um objeto de evento. Outros aplicativos podem abrir o evento para obter um identificador exclusivo para esse objeto de evento. À medida que cada aplicativo termina de usar o evento, ele fecha seu identificador para o objeto . Quando não há identificadores abertos restantes para o objeto de evento, o sistema destrói o objeto de evento. Por outro lado, um aplicativo pode obter um identificador para um objeto de janela existente. Quando o objeto de janela não é mais necessário, o aplicativo deve destruir o objeto , que invalida o identificador de janela.

Ocasionalmente, um objeto permanece na memória depois que todos os identificadores de objeto são fechados. Por exemplo, um thread pode criar um objeto de evento e aguardar no identificador de evento. Enquanto o thread está aguardando, outro thread pode fechar o mesmo identificador de objeto de evento. O objeto de evento permanece na memória, sem nenhum identificador de objeto de evento, até que o objeto de evento seja definido como o estado sinalizado e a operação de espera seja concluída. Neste momento, o sistema remove o objeto da memória.

Identificadores e objetos consomem memória. Portanto, para preservar o desempenho do sistema, você deve fechar identificadores e excluir objetos assim que eles não forem mais necessários. Se você não fizer isso, seu aplicativo poderá prejudicar o desempenho do sistema devido ao uso excessivo do arquivo de paginação.

Quando um processo é encerrado, o sistema fecha automaticamente identificadores e exclui objetos criados pelo processo. No entanto, quando um thread é encerrado, o sistema geralmente não fecha identificadores ou exclui objetos. As únicas exceções são objetos de conversa de janela, gancho, posição de janela e DDE (troca dinâmica de dados) ; esses objetos são destruídos quando o thread de criação é encerrado.