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 utilizza la funzione EnterCriticalSection per attendere l'acquisizione di un oggetto di sezione critica. 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 di 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);
}