Utilisation d’un gestionnaire d’arrêt
L’exemple suivant montre comment un gestionnaire de terminaison est utilisé pour s’assurer que les ressources sont libérées lors de l’exécution d’un corps de code protégé. Dans ce cas, un thread utilise la fonction EnterCriticalSection pour attendre la propriété d’un objet de section critique. Lorsque le thread est terminé d’exécuter le 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 terminaison garantit que cela se produira. Pour plus d’informations, consultez les 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);
}