Создание потоков и процессов в WIN API
Лабораторная работа
в среде программирования C++ QT 5
Среда программирования: C++ QT 5
Название работы: Создание потоков и процессов в WIN API
Вид работы: Лабораторная работа
Описание: Создание потоков и процессов в WIN API
Для выполнения работы необходимо создать два процесса: первый – «подопытный», второй – управляющий. Каждый процесс это отдельная программа, скомпилированная до выполнимого (*.exe) файла. Из управляющего процесса мы будем создавать и управлять потоками как в подопытном, так и в управляющем процессе.
Подопытный процесс должен:
- содержать функцию потока, названную по фамилии, например:
DWORD WINAPI IvanovThread();
- отображать идентификатор процесса и первичного потока;
- отображать адрес функции потока.
Функция потока должна:
- получать в качестве параметра целочисленную переменную;
- создавать файл отчета и сохранять в нем:
- принимаемый параметр;
- идентификатор процесса;
- дескриптор процесса;
- идентификатор потока;
- дескриптор потока;
- обеспечить высокую загрузку процессора, циклически выполняя инкремент целочисленной переменной.
Управляющий процесс должен:
- обеспечивать возможность открытия потока (получение дескриптора потока по идентификатору);
- обеспечивать возможность приостановки, запуска и уничтожения заданного потока;
- обеспечивать возможность открытия процесса (получение дескриптора процесса по его идентификатору);
- обеспечить возможность завершения указанного процесса (TerminateProcess).
- обеспечивать возможность создания в указанном процессе нового потока с передачей ему заданного значения параметра в качестве аргумента функции потока;
- обеспечивать возможность создания «подопытного» процесса;
- содержать функцию потока (код функции можно скопировать из программы «подопытного» процесса);
- отображать идентификатор процесса и первичного потока;
- отображать адрес функции потока;
- обеспечивать отображение в поле Memo всех выполняемых над потоками действий, например: Поток (ID = 188) приостановлен.
- обеспечивать возможность действий по варианту: 1) установка класса приоритета процесса; 2) установка предпочтительного процессора; 3) включение/отключение динамического изменения приоритета потока
ПЛАН ИСПЫТАНИЙ
Опыт номер I
1. Запустить управляющий процесс.
2. Создать из управляющего процесса «подопытный» процесс (CreateProcess).
3. Определить значения идентификатора процесса и первичного потока, адрес функции потока в «подопытном» и управляющем процессах.
4. Открыть подопытный процесс из управляющего (получить значение дескриптора «подопытного» процесса).
5. Создать в «подопытном» процессе новый поток (CreateRemoteThread) в приостановленном состоянии, указав в качестве стартового адреса потока – адрес функции потока управляющего процесса. Убедиться в создании нового потока в «подопытном» процессе с помощью диспетчера задач. Запустить созданный поток. Убедиться в запуске потока по загрузке процессора и файлу отчета, создаваемого «подопытным» процессом.
6. Повторить действия пунктов 1-4.
7. Повторить пункт 5, но в качестве стартового адреса потока указать адрес функции потока «подопытного» процесса.
8. Повторить действия пунктов 1-4.
9. Повторить пункт 5, но в качестве дескриптора процесса указать дескриптор управляющего процесса.
Опыт номер II
1. Создать в «подопытном» процессе несколько вторичных потоков, передав им различные значения аргумента функции потока.
2. Приостановить первичный поток. Проверить реакцию окна приложения «подопытного» процесса на пользовательский ввод.
3. Запустить первичный поток. Проверить реакцию окна приложения «подопытного» процесса на пользовательский ввод.
4. Приостановить первичный поток 3 раза подряд. Проверить реакцию окна приложения «подопытного» процесса на пользовательский ввод. Запустить первичный поток несколько раз. После каждого запуска проверять реакцию окна приложения «подопытного» процесса на пользовательский ввод. Определить количество необходимых запусков для возврата "управляемости" окна приложения.
5. Завершить первичный поток «подопытного процесса» (TerminateThread).
6. Завершить все вторичные потоки.
7. Повторить пункт 1.
8. Завершить «подопытный» процесс (TerminateProcess).
Опыт номер III
1. Провести эксперименты в соответствии со своим вариантом.
2. Пошагово описать и объяснить результаты испытаний.
Год: 2018
Данный заказ (лабораторная работа) выполнялся нашим сайтом в 2018-м году, в рамках этого заказа была разработана программа в среде программирования C++ QT 5. Если у Вас похожее задание на программу, которую нужно написать на C++ QT 5, либо на другом языке программирования, пожалуйста заполните форму, приведённую ниже, после чего Ваше задание в первую очередь рассмотрит наш программист, выполнявший в 2018-м году этот заказ, если он откажется, то Ваше задание оценят другие наши программисты в течение 48-и часов, если оценка нужна срочно, просим Вас оставить пометку об этом - напишите в тексте задания фразу "СРОЧНЫЙ ЗАКАЗ".
Viber: ![]() Telegram: ![]() ВКонтакте: ![]() ![]() E-mail: ![]() Skype: ![]() |