<<
>>

Завершение выполнения приложения

Выход из цикла обработки сообщений означает одно — необходимо завершить программу. В программе на C/C++ для этого непосредственно за циклом обработ- ки сообщений помещается оператор return (см.
листинг 16.1): return IрМsg.wРаrаm; В качестве операнда в операторе return используется значение поля wParam эк- земпляра структуры MSG — ^^1sg. Значение этого поля формируется значением соответствующего поля последнего сообщения, выбранного функцией GеtМеssаgеА из очереди. Нетрудно догадаться, что этим сообщением было WM_QUIT. Листинг 16.3 позволяет посмотреть, каким образом процесс завершения Windows-приложения реализован компилятором языка C/C++: 004012C6 call _WiпМаiп@16 θθ4012СВ push еах . 004012СС call _exit 00401З80_ехit proc near ; CODE XREF: start+A9_p 004*01389 call sub_4013С0 ;_doexit 00401З91_ехi t епdр 004θlЗСθ ;_doexit 004013D1 call ds:GetCurrentProcess 004013D7 pusheax ' 004013D8 call ds:TerminateProcess 0ϋ4ϋ1458 pushesi 00401459 call ds:ExitProcess 00401462 retn Из полного варианта листинга 16.3 видно, что процедура WiпМаiп возвращает в регистре еах значение wParam сообщения WM_QUIT.
Затем вызывается локальная процедура _exit, предназначенная для выполнения определенных действий по за- вершению приложения. Процедура _exit, в свою очередь, вызывает другую локаль- ную процедуру —_ ⅛ехit. Ее текст представляет наибольший интерес для нас, так как в нем мы видим те функции Win32 API, которые непосредственно выполняют работу по удалению приложения из системы Windows, — это три функции: Get- CurrentProcess, ТеrmiпаtеРrосеss и ЕхitРrосеss. Для завершения работы приложения достаточно использовать только функцию ExitProcess, что и сделано в разработан- ной нами программе (строки 158-161 листинга 16.4). На этом рассмотрение работы главной функции стандартного Windows-при- ложения можно считать оконченным. Видимо, вы обратили внимание на то, что до сих пор вся работа шла в интересах Windows: инициализировались определенные структуры данных, вызывались строго определенные функции и т. д. А где же по- лезная работа приложения? Выполнением этой работы занимается оконная функ- ция. Если быть более точным, то она выступает координатором этой работы. Далее разберемся с тем, как реализовать оконную функцию Windows-приложения на языке ассемблера.
<< | >>
Источник: В. И. Юров. Assembler. Учебник для вузов. 2-е изд. 2003

Еще по теме Завершение выполнения приложения:

  1. Завершение допроса.
  2. Завершенная мандала
  3. 4.5. Завершение беседы
  4. Глава четвертая ЗАВЕРШЕНИЕ
  5. 4.3. Завершение сеанса
  6. §.3 Завершение интервью
  7. 3 стадия. Завершение
  8. Завершение консультирования
  9. Глава шестая АННУЛИРОВАНИЕ ЗАВЕРШЕНИЯ
  10. 3-й урок: «Момент истины» или «Завершение»