Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Прогон программы создания процесса





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

#include <windows.h>

#include <stdio.h>

void main(VOID)

{

STARTUPINFO StartupInfo;

PROCESS_INFORMATION ProcInfo;

TCHAR CommandLine[] = TEXT("sleep");

 

ZeroMemory(&StartupInfo, sizeof(StartupInfo));

StartupInfo.cb = sizeof(StartupInfo);

ZeroMemory(&ProcInfo, sizeof(ProcInfo));

 

if(!CreateProcess(NULL, // Не используется имя модуля

CommandLine, // Командная строка

NULL, // Дескриптор процесса не наследуется.

NULL, // Дескриптор потока не наследуется.

FALSE, // Установка описателей наследования

0, // Нет флагов создания процесса

NULL, // Блок переменных окружения родительского процесса

NULL, // Использовать текущий каталог родительского процесса

&StartupInfo, // Указатель на структуру STARTUPINFO.

&ProcInfo) // Указатель на структуру информации о процессе.

)

 

printf("CreateProcess failed.");

 

// Ждать окончания дочернего процесса

WaitForSingleObject(ProcInfo.hProcess, INFINITE);

 

// Закрыть описатели процесса и потока

CloseHandle(ProcInfo.hProcess);

CloseHandle(ProcInfo.hThread);

}

В приведенной программе имя запускаемого модуля передается через второй параметр функции CreateProcess. В примере в качестве дочерней программы используется простейшая программа sleep, задача которой - выдержать паузу длительностью 10 секунд.

#include <windows.h>

#include <stdio.h>

void main(VOID)

{

printf("Данная программа будет спать

в течение 10000 мс\n");

Sleep(10000);

}

Выполнение обеих программ можно проконтролировать с помощью диспетчера задач.

Завершение процесса может быть осуществлено различными способами, например, с помощью функций ExitProcess, TerminateProcess. Однако, единственным способом, гарантирующим корректную очистку всех ресурсов, является возврат управления входной функцией первичного потока. Помимо перечисленных в системе имеется много полезных функций, реализующих API для управления процессами. Их полный перечень содержится в MSDN.

При завершении процесса сопоставленный с ним объект ядра "процесс" не освобождается до тех пор, пока не будут закрыты все внешние ссылки на этот объект.







Date: 2015-07-01; view: 462; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию