終了ハンドラーの使用
次の例は、保護されたコード本体の実行が終了するときに、終了ハンドラーを使用してリソースが確実に解放されるようにする方法を示しています。 この場合、スレッドは EnterCriticalSection 関数を使用して、クリティカル セクション オブジェクトの所有権を待機します。 クリティカル セクションで保護されているコードの実行が完了したら、LeaveCriticalSection 関数を呼び出して、クリティカル セクション オブジェクトを他のスレッドで使用できるようにする必要があります。 終了ハンドラーを使用すると、これが確実に発生します。 詳細については、クリティカル セクション オブジェクトを参照してください。
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);
}