Usando um manipulador de terminação

O exemplo a seguir mostra como um manipulador de terminação é usado para garantir que os recursos sejam liberados quando a execução de um corpo protegido de código termina. Nesse caso, um thread usa a função EnterCriticalSection para aguardar a propriedade de um objeto de seção crítica. Quando o thread terminar de executar o código protegido pela seção crítica, ele deverá chamar a função LeaveCriticalSection para disponibilizar o objeto de seção crítica para outros threads. O uso de um manipulador de terminação garante que isso acontecerá. Para obter mais informações, consulte objetos de seção crítica.

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); 
}