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