Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 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; Нарушение авторских прав |