Uso de un controlador de terminación
En el ejemplo siguiente se muestra cómo se usa un controlador de terminación para asegurarse de que los recursos se liberan cuando finaliza la ejecución de un cuerpo protegido del código. En este caso, un subproceso usa la función EnterCriticalSection para esperar la propiedad de un objeto de sección crítico. Cuando el subproceso haya terminado de ejecutar el código protegido por la sección crítica, debe llamar a la función LeaveCriticalSection para que el objeto de sección crítico esté disponible para otros subprocesos. El uso de un controlador de terminación garantiza que esto ocurrirá. Para obtener más información, consulte objetos de sección críticos.
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);
}