Частина V структурна обробка винятків

Перевірте себе: FuncaDoodleDoo

Подивимося, чи Ви відгадаєте, що саме повертає наступна функція

while (dwTemp 1 Вбудована функція (intrinsic function) — особлива функція, що розпізнається компілятором Замість генерації виклику такої функції він підставляє в точці виклику її код. При мірою вбудовуваної функції єmemcpy(якщо зазначений ключ компілятор) Зустрічаючи викликmemcpy,компілятор підставляє ec код безпосередньо в викликаючу функцію Зазвичай це прискорює роботу програми ціною збільшення її розміру ФункціяAbnormalTerminationвідрізняється відтетсрутим, що існує тільки у варіанті, що вбудовується, її немає в жодній бібліотеці С.

// 2. Запитуємо дозвіл на доступ // до захищених даних, а потім використовуємо WaitForSingleObject(g_hSem, INFINITE);

// 3. Даємо та іншим користуватися захищеними даними ReleaseSemaphore(g_hSem, 1, NULL);

// у блоці try був помилок - управління // передано до блоку finally природним чином

// щось викликало виняток, і, оскільки в блоці try // немає коду, який міг би викликати передчасний // вихід, блок finally виконується через глобальну // розкрутку // якби в блоці try був оператор goto, ми б // не впізнали, як потрапили сюди

// 4. Продовжуємо щось робити

Тепер Ви знаєте, як створювати обробники завершення. Незабаром Ви побачите, що вони можуть бути ще кориснішими і важливішими, — коли ми дійдемо до фільтрів та обробників винятків (у наступному розділі). А поки давайте підсумовуємо причини, з яких слід застосовувати обробники завершення.

Спрощується обробка помилок - очищення гарантується і проводиться в одному місці.

Поліпшується сприйняття тексту програм.

Полегшується супровід коду.

Вдається досягти мінімальних витрат за швидкістю та розміром коду — за умови правильного застосування обробників.

Ця програма, «23 SEHTerm.exe» (див. листинг на рис. 23-1), демонструє обробку завершення. Файли вихідного коду та ресурсів цієї програми знаходяться в каталозі 23-SEHTerm на компакт-диску, що додається до книги.

Після запуску SEHTerm її первинний потік входить до блокуtry.З нього відкривається наступне вікно.

У Windows 2000 аналогічне вікно виглядає інакше

Якщо Ви тепер клацніть кнопку Сlose (у Windows 98) або OK (у Windows 2000), процес завершиться. Однак у вихідному коді цієї програми присутній блокfinally,який буде виконаний до того, як процес завершиться З цього блоку відкривається наступне вікно.

Блок finаllувиконується тому, що відбувається ненормальний вихід із пов'язаного з пім блокуtry.Після закриття цього вікна процес завершується.

Зверніть увагу, що цього разу у вікні повідомляється про нормальний вихід з блокуtryКоли Ви закриєте це вікно, потік вийде з блокуfinallуі покаже після дня вікно.

Після того, як Ви приховаєте і це вікно, процес нормально завершиться, оскільки функціяWinMainповерне керування. Зауважте, що це вікно не з'являється при аварійному завершенні процесу.

Калькулятор

Сервіс безкоштовної оцінки вартості роботи

  1. Заповніть заявку. Фахівці розрахують вартість вашої роботи
  2. Розрахунок вартості прийде на пошту та по СМС

Номер вашої заявки

Зараз на пошту прийде автоматичний лист-підтвердження з інформацією про заявку.