СИНХРОНИЗАЦИЯ ПОТОКОВ И ПРОЦЕССОВ




ЛАБОРАТОРНАЯ РАБОТА № 1

 

Цель работы. Изучение средств синхронизации потоков и процессов, использование их в Windows-программах.

 

МЕТОДИЧЕСКИЕ УКАЗАНИЯ:

Задание: Для приведенных ниже вариантов заданий составить многопоточную Windows-программу в среде MS Visual С++, в которой производится создание и выполнение 3 потоков: 1-й поток выполняет операции в главном окне приложения, 2-й и 3-й потоки - в другом окне (временном или дочернем). Для синхронизации работы 1-го потока с аналогичным потоком в дочернем процессе (запущенный 2-й экземпляр этого приложения) используется именованный объект синхронизации. Для синхронизации работы 2-го и 3-го потока используется неименованный объект синхронизации.

Требования к программе. В программе должно быть следующее:

- описана главная функция приложения WinMain, в которой регистрируется класс главного окна, создается и выводится это окно, организуется цикл обработки очереди сообщений приложения;

- главное окно приложения должно быть развернутым на весь экран и в заголовке содержать надпись: Лабораторная работа № 1 по СП студ. Фамилия И.О. группа <шифр>;

- в главном окне должно быть создано меню, состоящее из пунктов: Поток 1 (Запустить, Приостановить); Поток 2 (Запустить, Приостановить); Поток 3 (Запустить, Приостановить); Дочерний процесс (Запустить, Завершить);

- 1-й, 2-й и 3-й потоки должны быть созданы в приостановленном состоянии в оконных функциях (по сообщению WM_CREATE), для потоков должны быть описаны соответствующие потоковые функции, выполняющие в цикле операции в окнах согласно варианту задания. Запуск потоков в работу, их приостановка производятся при выборе соответствующих пунктов меню;

- в потоковых функциях 1-го, 2-го и 3-го потоков должны быть использованы указанные в варианте задания средства синхронизации. При захвате свободного объекта синхронизации потоковая функция выполняет операции вывода в окно заданное число раз (количество повторов) и освобождает этот объект синхронизации;

- 1-й поток выполняет операции в рабочей области главного окна, для него должен быть создан именованный объект синхронизации, доступный в других процессах. Работа этого потока синхронизируется с аналогичным потоком дочернего процесса, который представляет собой еще один запущенный экземпляр данного приложения;

- 2-й и 3-й потоки синхронизируются одним неименованным объектом синхронизации и по очереди выполняют свои операции во временном или дочернем окне;

- в качестве дочернего процесса должен быть запущен еще один экземпляр данного приложения. Т.к. 1-й поток этого экземпляра использует именованный объект синхронизации, то его работа будет синхронизироваться с аналогичным потоком предыдущего экземпляра;

- при запуске приложения необходимо проверять наличие уже запущенного экземпляра данного приложения, выдавать об этом сообщение с помощью функции MessageBox с кнопками "Да", "Нет", по выбору пользователя продолжать или завершать работу

Используемые Win32 API функции: для работы с потоками необходимо использовать функции: CreateThread, ResumeThread, SuspendThread, Sleep; для запуска дочернего процесса необходимо использовать функцию CreateProcess, а для его завершения - TerminateProcess; для синхронизации потоков необходимо использовать: Create-функции для создания объектов синхронизации, Wait-функцию для ожидания освобождения объекта, соответствующие функции освобождения объектов синхронизации.

 

Порядок выполнения работы:

1. Создать проект Windows-приложения.

2. В окне просмотра классов и файлов на вкладке FileView выбрать cpp-файл, затем в окне редактирования ввести исходный текст программы.

3. Создать файл с описанием ресурсов (при необходимости) с использованием редактора ресурсов.

4. Cоздать исполняемый модуль приложения - трансляция, компоновка.

5. Проверить результат работы приложения - запуск исполняемого модуля.

 

ВАРИАНТЫЗАДАНИЙ:

 

№ вар Поток Выводимый объект Выполняемые действия Кол-во повторов Объект синхронизации
  Поток 1 (гл. окно) Текстовая строка Перемещается по боковой диагонали снизу-вверх и наоборот с интервалом 0,8 сек   Мьютекс
Поток 2 (вр. окно) Сектор эллипса Перемещается в окне случайным образом с интервалом 0,6 сек   Критическая секция
Поток 3 (вр. окно) Текстовая строка Перемещается по углам окна по часовой стрелке с интервалом 0,5 сек  
  Поток 1 (гл. окно) Сегмент эллипса Перемещается по углам окна против часовой стрелки с интервалом 0,7 сек   Семафор
Поток 2 (доч. окно)   Битовый образ Перемещается слева-направо и наоборот с интервалом 0,6 сек   Мьютекс
Поток 3 (доч. окно)   Текстовая строка Перемещается сверху-вниз и наоборот с интервалом 0,5 сек  
  Поток 1 (гл. окно) Прямоугольная рамка Перемещается по диагонали сверху-вниз и наоборот с интервалом 0,4 сек   Событие
Поток 2 (вр. окно) Эллипс Перемещается по периметру окна против часовой стрелки с шагом 30 пикселей с интервалом 0,5 сек   Семафор
Поток 3 (вр. окно) Окружность Перемещается слева-направо и наоборот с шагом 20 пикселей с интервалом 0,4 сек  
  Поток 1 (гл. окно) Битовый образ Перемещается сверху-вниз и наоборот с шагом 10 пикселей с интервалом 0,2 сек   Ожидаемый таймер
Поток 2 (доч. окно) Текстовая строка Перемещается по диагонали сверху-вниз и наоборот с шагом 40,30 пикселей с интервалом 0,5 сек   Событие
Поток 3 (доч. окно) Прямоугольник Перемещается по боковой диагонали снизу-вверх и наоборот с шагом 20,15 пикселей с интервалом 0,3 сек    
  Поток 1 (гл. окно) Текстовая строка Перемещается сверху-вниз и наоборот с интервалом 0,5 сек   Мьютекс
Поток 2 (вр. окно) Битовый образ Перемещается по окружности радиусом 180 пикселей против часовой стрелки на 10о с интервалом 0,4 сек   Ожидаемый таймер
Поток 3 (вр. окно) Прямоугольник с закругленны-ми краями Перемещается в окне случайным образом с интервалом 0,5 сек  
  Поток 1 (гл. окно) Текстовая строка Перемещается по периметру окна по часовой стрелке с шагом 20 пикселей с интервалом 0,3 сек   Семафор
Поток 2 (доч. окно) Эллипс Перемещается по периметру окна против часовой стрелки с шагом 30 пикселей с интервалом 0,5 сек   Критическая секция
Поток 3 (доч. окно) Окружность Перемещается слева-направо и наоборот с шагом 20 пикселей с интервалом 0,4 сек  
  Поток 1 (гл. окно) Битовый образ Перемещается сверху-вниз и наоборот с шагом 10 пикселей с интервалом 0,6 сек   Событие
Поток 2 (вр. окно) Текстовая строка Перемещается по диагонали сверху-вниз и наоборот с шагом 40,30 пикселей с интервалом 0,5 сек   Мьютекс
Поток 3 (вр. окно) Прямоугольник Перемещается по боковой диагонали снизу-вверх и наоборот с шагом 20,15 пикселей с интервалом 0,3 сек  
  Поток 1 (гл. окно) Текстовая строка Перемещается сверху-вниз и наоборот с интервалом 0,4 сек   Ожидаемый таймер
Поток 2 (доч. окно) Битовый образ Перемещается по окружности радиусом 180 пикселей против часовой стрелки на 10о с интервалом 0,6 сек   Семафор
Поток 3 (доч. окно) Прямоугольник с закругленны-ми краями Перемещается в окне случайным образом с интервалом 0,5 сек  
  Поток 1 (гл. окно) Битовый образ Перемещается по окружности радиусом 130 пикселей по часовой стрелке на 15о с интервалом 0,4 сек   Мьютекс
Поток 2 (вр. окно) Квадрат Перемещается слева-направо и наоборот с шагом 20 пикселей с интервалом 0,3 сек   Событие
Поток 3 (вр. окно) Сектор эллипса Перемещается сверху-вниз и наоборот с шагом 10 пикселей с интервалом 0,2 сек  
  Поток 1 (гл. окно) Битовый образ Перемещается по диагонали сверху-вниз и наоборот с шагом 40,30 пикселей с интервалом 0,5 сек   Семафор
Поток 2 (доч. окно) Сегмент эллипса Перемещается по окружности радиусом 130 пикселей по часовой стрелке на 15о с интервалом 0,5 сек   Ожидаемый таймер
Поток 3 (доч. окно) Битовый образ Перемещается по окружности радиусом 180 пикселей против часовой стрелки на 10о с интервалом 0,4 сек  
  Поток 1 (гл. окно) Прямоугольная рамка Перемещается по диагонали сверху-вниз и наоборот с интервалом 0,5 сек   Событие
Поток 2 (вр. окно) Битовый образ Перемещается по углам окна по часовой стрелке с интервалом 0,8 сек   Критическая секция
Поток 3 (вр. окно) Эллипс Перемещается по углам окна против часовой стрелки с интервалом 0,4 сек  
  Поток 1 (гл. окно) Сегмент эллипса Перемещается слева-направо и наоборот с интервалом 0,3 сек   Мьютекс
Поток 2 (доч. окно) Текстовая строка Перемещается по углам окна по часовой стрелке с интервалом 0,5 сек   Событие
Поток 3 (доч. окно) Битовый образ Перемещается по углам окна против часовой стрелки с интервалом 0,6 сек  
  Поток 1 (гл. окно) Битовый образ Перемещается по окружности радиусом 130 пикселей по часовой стрелке на 15о с интервалом 0,5 сек   Ожидаемый таймер
Поток 2 (доч. окно) Окружность Перемещается по окружности радиусом 180 пикселей против часовой стрелки на 10о с интервалом 0,4 сек   Мьютекс
Поток 3 (доч. окно) Текстовая строка Перемещается по периметру окна против часовой стрелки с шагом 30 пикселей с интервалом 0,5 сек  
  Поток 1 (гл. окно)   Битовый образ Перемещается в окне случайным образом с интервалом 0,4 сек   Мьютекс
Поток 2 (вр. окно) Прямоугольник Перемещается по углам окна по часовой стрелке с интервалом 0,5 сек   Критическая секция
Поток 3 (вр. окно) Битовый образ Перемещается по углам окна против часовой стрелки с интервалом 0,2 сек  
  Поток 1 (гл. окно)   Текстовая строка Перемещается слева-направо и наоборот с интервалом 0,8 сек   Семафор
Поток 2 (доч. окно)   Текстовая строка Перемещается сверху-вниз и наоборот с интервалом 0,4 сек   Мьютекс
Поток 3 (доч. окно) Прямоугольник с закруглен- ными краями Перемещается по диагонали сверху-вниз и наоборот с интервалом 0,3 сек  
  Поток 1 (гл. окно) Квадрат Перемещается по боковой диагонали снизу-вверх и наоборот с интервалом 0,7 сек   Событие
Поток 2 (вр. окно) Битовый образ Перемещается по периметру окна по часовой стрелке с шагом 20 пикселей с интервалом 0,3 сек   Семафор
Поток 3 (вр. окно) Окружность Перемещается по диагонали сверху-вниз и наоборот с интервалом 0,5 сек  
  Поток 1 (гл. окно) Прямоугольник Перемещается по боковой диагонали снизу-вверх и наоборот с интервалом 0,2 сек   Ожидаемый таймер
Поток 2 (доч. окно) Битовый образ Перемещается по периметру окна по часовой стрелке с шагом 20 пикселей с интервалом 0,3 сек   Событие
Поток 3 (доч. окно) Прямоугольник с закругленны-ми краями Перемещается по периметру окна против часовой стрелки с шагом 30 пикселей с интервалом 0,5 сек  
  Поток 1 (гл. окно) Текстовая строка Перемещается слева-направо и наоборот с шагом 20 пикселей с интервалом 0,4 сек   Мьютекс
Поток 2 (вр. окно) Текстовая строка Перемещается сверху-вниз и наоборот с шагом 10 пикселей с интервалом 0,2 сек   Ожидаемый таймер
Поток 3 (вр. окно) Битовый образ Перемещается по диагонали сверху-вниз и наоборот с шагом 40,30 пикселей с интервалом 0,5 сек  
  Поток 1 (гл. окно) Битовый образ Перемещается по боковой диагонали снизу-вверх и наоборот с шагом 20,15 пикселей с интервалом 0,3 сек   Семафор
Поток 2 (доч. окно) Квадрат Перемещается по окружности радиусом 130 пикселей по часовой стрелке на 15о с интервалом 0,5 сек   Критическая секция
Поток 3 (доч. окно) Битовый образ Перемещается по окружности радиусом 180 пикселей против часовой стрелки на 10о с интервалом 0,4 сек  
  Поток 1 (гл. окно) Текстовая строка Перемещается по пери-метру окна по часовой стрелке с шагом 20 пиксе-лей с интервалом 0,3 сек   Событие
Поток 2 (вр. окно) Битовый образ Перемещается по боковой диагонали снизу-вверх и наоборот с шагом 20,15 пикселей с интервалом 0,3 сек   Мьютекс
Поток 3 (вр. окно) Квадрат Перемещается по окружности радиусом 130 пикселей по часовой стрелке на 15о с интервалом 0,5 сек  
  Поток 1 (гл. окно) Битовый образ Перемещается по окружности радиусом 180 пикселей против часовой стрелки на 10о с интервалом 0,4 сек   Ожидаемый таймер
Поток 2 (доч. окно) Текстовая строка Перемещается по боковой диагонали снизу-вверх и наоборот с интервалом 0,6 сек   Семафор
Поток 3 (доч. окно) Сектор эллипса Перемещается в окне случайным образом с интервалом 0,5 сек  
  Поток 1 (гл. окно) Текстовая строка Перемещается по углам окна по часовой стрелке с интервалом 0,8 сек   Мьютекс
Поток 2 (вр. окно) Сегмент эллипса Перемещается по углам окна против часовой стрелки с интервалом 0,5 сек   Событие
Поток 3 (вр. окно)   Битовый образ Перемещается слева-направо и наоборот с интервалом 0,3 сек  
  Поток 1 (гл. окно) Прямоугольник Перемещается по боковой диагонали снизу-вверх и наоборот с интервалом 0,4 сек   Семафор
Поток 2 (доч. окно) Текстовая строка Перемещается по периметру окна по часовой стрелке с шагом 20 пикселей с интервалом 0,3 сек   Событие
Поток 3 (доч. окно) Битовый образ Перемещается по периметру окна против часовой стрелки с шагом 30 пикселей с интервалом 0,5 сек  
  Поток 1 (гл. окно) Текстовая строка Перемещается слева-направо и наоборот с шагом 20 пикселей с интервалом 0,4 сек   Событие
Поток 2 (вр. окно) Текстовая строка Перемещается сверху-вниз и наоборот с шагом 10 пикселей с интервалом 0,2 сек   Ожидаемый таймер
Поток 3 (вр. окно) Прямоугольник с закруглен- ными краями Перемещается по диагонали сверху-вниз и наоборот с шагом 40,30 пикселей с интервалом 0,5 сек  
  Поток 1 (гл. окно) Битовый образ Перемещается по боковой диагонали снизу-вверх и наоборот с шагом 20,15 пикселей с интервалом 0,3 сек   Ожидаемый таймер
Поток 2 (доч. окно) Квадрат Перемещается по окружности радиусом 130 пикселей по часовой стрелке на 15о с интервалом 0,5 сек   Мьютекс
Поток 3 (доч. окно) Битовый образ Перемещается по окружности радиусом 180 пикселей против часовой стрелки на 10о с интервалом 0,4 сек  

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-12-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: