Операционные системы. Программирование в операционной среде Windows
15 Функция задерживает выполнение кода до тех пор, пока объект, определяемый параметром hObject, не перейдет в свободное (незанятое) состояние. Объект «процесс» переходит в такое состояние при его завершении. Поэтому вызов WaitForSingleObject приостанавливает выполнение потока родителъского процесса до завершения порожденного им дочернего процесса. Когда WaitForSingleObject вернет управление, можно узнатъ код завершения дочернего процесса через функцию GetExitCodeProcess. Обраш,ение к функции CloseHandle в приведенном выше фрагменте кода заставляет систему уменъшитъ значения счетчиков объектов «поток» и «процесс» до нуля и тем самым освободитъ памятъ, занимаемую этими объектами. Описателъ ОЯ "первичный поток", принадлежапщй дочернему процессу, был закрыт сразу после возврата из функции CreateProcess. Это не приводит к завершению первичного потока дочернего процесса, а просто уменъшает счетчик этого объекта. 1.9. Запуск обособленных дочерних процессов Чаще приложение создает другие процессы как обособленные (detached processes). Это значит, что после создания и запуска нового процесса родителъскому процессу нет нужды с ним взаимодействоватъ или ждатъ, пока тот закончит работу. Чтобы сделатъ дочерний процесс обособленным, нужно вызовом функции CloseHandle свои описатели, связанные с новым процессом и его первичным потоком: STARTUPINFOA si = { sizeof(si) }; PROCESS_INFORMATION pi; // Порождение дочернего процесса. BOOL fSuccess = CreateProcessA(. . ., &si , &pi); if (fSuccess) { CloseHandle(pi.hThread); CloseHandle(pi.hProcess); } 1.10. Лабораторная работа №1. Работа с процессами 1. Создатъ консолъное приложение в среде Microsoft Visual Studio (начиная с версии 2005): 1.1. Запуститъ, например, MoGsoft visual studio гоое _ 1.2. На стартовой странице, выбрав пункт меню File, создатъ новый проект: File\New Project (рис. 1.3).
Made with FlippingBook
RkJQdWJsaXNoZXIy MTY0OTYy