На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Using a Termination Handler



The following example shows how a try-finally statement is used to ensure that resources are released when execution of a guarded body of code terminates. In this case, a thread uses the EnterCriticalSection function to wait for ownership of a critical section object. When the thread is finished executing the code that is protected by the critical section, it must call the LeaveCriticalSection function to make the critical section object available to other threads. Using a try-
finally statement guarantees that this will happen.

For more information about critical section objects, see Synchronization.

LPTSTR lpBuffer = NULL;
CRITICAL_SECTION csCriticalSection;

try {

// EnterCriticalSection synchronizes code
// with other threads.

EnterCriticalSection(&CriticalSection);

// Perform a task that may cause an exception.

lpBuffer = (LPTSTR) LocalAlloc(LPTR, 10);
strcpy(lpBuffer,"Hello"); // possible access violation
printf("%s\n",lpBuffer);
LocalFree(lpBuffer);
}

// LeaveCriticalSection is called even if

// an exception occurred.

finally {
LeaveCriticalSection(&CriticalSection);
}



Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Использование Вручителя Завершения



Следующий пример показывает как попытка-наконец утверждение использована, чтобы проверять, что ресурсы выпущены когда выполнение охраняющего тела кода завершается. В этом случае, резьба использует функцию EnterCriticalSection, чтобы ждать собственность на критический объект секции. Когда резьба завершена выполняя код, который защищен критической секцией, это должно назвать функцию LeaveCriticalSection, чтобы делать критическим объектом секции пригодным для другой резьбы. Использование tryfinally утверждения гарантирует, что это случится.

Более подробно о критических объектах секции, смотри Синхронизацию.

LPTSTR lpBuffer = НЕДЕЙСТВИТЕЛЬНЫЙ;
CRITICAL_SECTION csCriticalSection;

попытка {

// EnterCriticalSection СИНХРОНИЗИРУЕТ код // с другой резьбой.

EnterCriticalSection(&CriticalSection);

// Выполните задачу, которая может вызвать исключение.

lpBuffer = (LPTSTR) LocalAlloc(LPTR, 10);
strcpy(lpBuffer,"Hello"); // возможное нарушение доступа printf("%s\n",lpBuffer);
LocalFree(lpBuffer);
}

// LeaveCriticalSection НАЗВАН даже если бы

// исключение происходило.

наконец {
LeaveCriticalSection(&CriticalSection);
}



Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz