Частина 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поверне керування. Зауважте, що це вікно не з'являється при аварійному завершенні процесу.
Калькулятор
Сервіс безкоштовної оцінки вартості роботи
- Заповніть заявку. Фахівці розрахують вартість вашої роботи
- Розрахунок вартості прийде на пошту та по СМС
Номер вашої заявки
Зараз на пошту прийде автоматичний лист-підтвердження з інформацією про заявку.