Verwenden eines Terminierungshandlers
Das folgende Beispiel zeigt, wie ein Terminierungshandler verwendet wird, um sicherzustellen, dass Ressourcen freigegeben werden, wenn die Ausführung eines bewachten Codetexts beendet wird. In diesem Fall verwendet ein Thread die EnterCriticalSection-Funktion , um auf den Besitz eines kritischen Abschnittsobjekts zu warten. Wenn der Thread die Ausführung des durch den kritischen Abschnitt geschützten Codes abgeschlossen hat, muss er die LeaveCriticalSection-Funktion aufrufen, um das Objekt des kritischen Abschnitts für andere Threads verfügbar zu machen. Die Verwendung eines Terminierungshandlers garantiert, dass dies geschieht. Weitere Informationen finden Sie unter Kritische Abschnittsobjekte.
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);
}