Utilisation d’un gestionnaire de terminaisons

L’exemple suivant montre comment un gestionnaire de terminaisons est utilisé pour s’assurer que les ressources sont libérées lorsque l’exécution d’un corps de code protégé se termine. Dans ce cas, un thread utilise la fonction EnterCriticalSection pour attendre la propriété d’un objet de section critique. Quand le thread a terminé l’exécution du code protégé par la section critique, il doit appeler la fonction LeaveCriticalSection pour rendre l’objet de section critique disponible pour d’autres threads. L’utilisation d’un gestionnaire de terminaisons garantit que cela se produira. Pour plus d’informations, consultez objets de section critique.

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