Interfaccia oggetto
Windows fornisce funzioni che eseguono le attività seguenti:
- Creare un oggetto
- Ottenere un handle di oggetto
- Ottenere informazioni sull'oggetto
- Impostare informazioni sull'oggetto
- Chiudere l'handle dell'oggetto
- Eliminare definitivamente l'oggetto
Alcune di queste attività non sono necessarie per ogni oggetto. Alcune di queste attività vengono combinate per determinati oggetti. Ad esempio, un'applicazione può creare un oggetto evento. Altre applicazioni possono aprire l'evento per ottenere un handle univoco per questo oggetto evento. Al termine dell'utilizzo dell'evento, ogni applicazione chiude il relativo handle all'oggetto . Quando non sono presenti handle aperti rimanenti per l'oggetto evento, il sistema elimina definitivamente l'oggetto evento. Al contrario, un'applicazione può ottenere un handle per un oggetto finestra esistente. Quando l'oggetto finestra non è più necessario, l'applicazione deve eliminare definitivamente l'oggetto, che invalida l'handle della finestra.
In alcuni casi, un oggetto rimane in memoria dopo che tutti gli handle di oggetto sono stati chiusi. Ad esempio, un thread può creare un oggetto evento e attendere l'handle dell'evento. Mentre il thread è in attesa, un altro thread potrebbe chiudere lo stesso handle dell'oggetto evento. L'oggetto evento rimane in memoria, senza handle di oggetti evento, fino a quando l'oggetto evento non viene impostato sullo stato segnalato e l'operazione di attesa viene completata. Al momento, il sistema rimuove l'oggetto dalla memoria.
Handle e oggetti utilizzano la memoria. Pertanto, per mantenere le prestazioni del sistema, è necessario chiudere handle ed eliminare gli oggetti non appena non sono più necessari. In caso contrario, l'applicazione può compromettere le prestazioni del sistema, a causa di un uso eccessivo del file di paging.
Quando un processo termina, il sistema chiude automaticamente gli handle ed elimina gli oggetti creati dal processo. Tuttavia, quando un thread termina, il sistema in genere non chiude handle o elimina oggetti. Le uniche eccezioni sono gli oggetti di conversazione window, hook, window position e dynamic data exchange (DDE); questi oggetti vengono eliminati definitivamente quando termina il thread di creazione.