Uso di un gestore di terminazione

Nell'esempio seguente viene illustrato come viene usato un gestore di terminazione per garantire che le risorse vengano rilasciate quando l'esecuzione di un corpo sorvegliato di codice termina. In questo caso, un thread usa la funzione EnterCriticalSection per attendere la proprietà di un oggetto sezione critico. Al termine dell'esecuzione del codice protetto dalla sezione critica, il thread deve chiamare la funzione LeaveCriticalSection per rendere l'oggetto sezione critico disponibile per altri thread. L'uso di un gestore di terminazione garantisce che ciò accadrà. Per altre informazioni, vedere Oggetti sezione critici.

LPTSTR lpBuffer = NULL; 
CRITICAL_SECTION CriticalSection; 

// EnterCriticalSection synchronizes code with other threads. 
EnterCriticalSection(&CriticalSection); 
 
__try 
{ 
    // Perform a task that may cause an exception. 
    lpBuffer = (LPTSTR) LocalAlloc(LPTR, 10); 
    StringCchCopy(lpBuffer, 10, TEXT("Hello"));

    _tprintf(TEXT("%s\n"),lpBuffer); 
    LocalFree(lpBuffer); 
} 
__finally 
{ 
    // LeaveCriticalSection is called even if an exception occurred. 
    LeaveCriticalSection(&CriticalSection); 
}