МНОГОПОТОЧНОСТЬ В WINDOWS-95 Методические указания лабораторного практикума на ЭВМ по курсу Системное и прикладное программное обеспечение (4 семестр) (составитель доц. Рублев В.С.) 1 I. Общее задание Разработать программу под Windows-95, которая осуществляет многопоточный режим работы, создает 4 дочерних окна с выполнением в них следующих действий: 1. Окно отображения данных с кнопкой Параметры, в котором при нажатии кнопки происходит запрос параметров данных в диалоговом окне, генерация данных и их вывод в окно для просмотра (скроллинг). Первый параметр определяет размерность массива данных, и при размерности по умолчанию 1 все данные единственного элемента массива задаются через параметры, а при большей размерности генерируются при помощи датчика псевдослучайных чисел rand(). 2. Окно вывода графики, определяемой данными и индивидуальным заданием. (Замечания: данные – целые неотрицательные числа; координаты точек определяются как остатки от деления на соответствующие размеры окна графики; компоненты цвета определяются как остатки от деления на 256). 3. Окно вычислений, определяемых данными и индивидуальным заданием, выводом результатов вычислений (выполнение асинхронно с выводом в окно графики). 4. Окно вычисления с индикатором прогресса и вывода текущей характеристики графики (выполнение синхронно с выводом графики). Отчет по проделанной работе должен содержать: 1) общее и индивидуальное задание; 2) программу; 3) полный набор тестов, содержащий как общий случай, так и крайние. II. Варианты индивидуальных заданий 1. Параметры – координаты точки на плоскости, компоненты rgb-цвета. Графика – ломанная с началом в начале координат, звенья которой заданного цвета проходят через точки массива. Вычисления – длина ломанной. Характеристика графики – текущая длина построенной ломанной. 2. Параметры – координаты 3 точек на плоскости, компоненты rgb-цвета. Графика – треугольники, каждый из которых имеет вершины в точках элемента массива и окрашивается в заданный элементом цвет. Вычисления – сумма площадей треугольников. Характеристика графики – текущая сумма площадей треугольников. 3. Параметры – координаты 2 точек на плоскости, компоненты rgb-цвета. Графика – прямоугольники, 2 вершины которых заданы 2 точками, а стороны параллельны осям координат, окрашенные в заданные цвета. Вычисления – сумма отношений сторон прямоугольников. Характеристика графики – текущая сумма отношений сторон прямоугольников. 4. Параметры – координаты 2 точек на плоскости, компоненты rgb-цвета. Графика – круги, каждый из которых имеет центр в 1-й точке, радиус до 2-й точки, и окрашенные в заданные цвета. Вычисления – сумма площадей кругов. Характеристика графики – текущая сумма площадей кругов. 5. Параметры – координаты 5 точек на плоскости, компоненты rgb-цвета. Графика – многоугольники, каждый из которых имеет вершины в заданных точках и окрашен в заданный цвет в режиме ALTERNATE. Вычисления – сумма периметров многоугольников. Характеристика графики – текущая сумма периметров многоугольников. 2 6. Параметры – координаты точки на плоскости, компоненты rgb-цвета. Графика – разбиение на прямоугольники (начальное разбиение определяется делением окна на 4 части и окраской в чистые цвета красный, зеленый, голубой и черный), при котором для каждой следующей точки определяется прямоугольник, которому он принадлежит и он разбивается на 4 прямоугольника; цвета новых прямоугольников определяются как красный, зеленый, голубой и черный. Вычисления – число треугольников разбиения. Характеристика графики – текущая число треугольников разбиения. 7. Параметры – координаты 2 точек на плоскости, компоненты rgb-цвета. Графика – эллипсы, каждый из которых окрашен в заданный цвет и вписан в прямоугольник, определяемый 2-мя точками. Вычисления – число эллипсов, у которых горизонтальный диаметр больше вертикального. Характеристика графики – текущее число эллипсов, у которых горизонтальный диаметр больше вертикального. 8. Параметры – координаты 4 точек на плоскости, компоненты rgb-цвета. Графика – многоугольники, каждый из которых имеет вершины в заданных точках и окрашен в заданный цвет в режиме WINDING. Вычисления – сумма площадей многоугольников. Характеристика графики – текущая сумма площадей многоугольников. 9. Параметры – координаты 4 точек на плоскости, компоненты rgb-цвета. Графика – сектора кругов, каждый из которых имеет центр в 1-й точке, радиус до 2-й точки, ограничен лучами из центра до 3-й и 4-й точки и окрашен в заданный цвет. Вычисления – сумма площадей секторов кругов. Характеристика графики – текущая сумма площадей секторов кругов. 10. Параметры – координаты 5 точек на плоскости, компоненты rgb-цвета. Графика – прямоугольники, каждый из которых имеет стороны, параллельные осям координат, содержит заданные точки, имеет минимальную площадь и окрашен в заданный цвет. Вычисления – максимальная площадь прямоугольника и его номер. Характеристика графики – текущие максимальная площадь прямоугольника и его номер. 11. Параметры – координаты 4 точек на плоскости, компоненты rgb-цвета. Графика – прямоугольники со скругленными углами, 2 вершины каждого из которых заданы первыми 2-мя точками, стороны параллельны осям координат, а углы сглажены эллипсами, заданными вторыми 2-мя точками, и который окрашен в заданный цвет. Вычисления – максимум отношений сторон прямоугольников. Характеристика графики – текущий максимум отношений сторон прямоугольников. 12. Параметры – координаты 4 точек на плоскости, компоненты rgb-цвета. Графика – сегменты эллипсов, каждый из которых определяется 4-мя точками (первые 2 точки определяют эллипс, а вторые 2 точки определяют лучи из центра эллипса, ограничивающие сегмент) и окрашен в заданный цвет. Вычисления – сумма углов сегментов. Характеристика графики – текущая сумма углов сегментов. 13. Параметры – координаты точки на плоскости, компоненты rgb-цвета. Графика – кривая, проведенная через точки массива и сглаженная сплайном Безье (дополнительные точки сплайна для каждой точки Xi определяются как 1/2(Xi+1 - Xi-1), а цвет каждого звена кривой определяется заданным цветом). Вычисления – число точек самопересечения кривой. Характеристика графики – текущее число точек самопересечения кривой. 3 14. Параметры – координаты 4 точек на плоскости, компоненты rgb-цвета. Графика – сектора кругов, каждый из которых определяется 4-мя точками (первые 2 точки определяют центр и радиус, а вторые 2 точки определяют лучи из центра круга, ограничивающие сектор) и окрашен в заданный цвет. Вычисления – максимальный угол и номер сектора. Характеристика графики – текущие максимальный угол и номер сектора. 15. Параметры – координаты точки на плоскости, компоненты rgb-цвета. Графика – спираль, у которой каждое звено имеет заданный цвет, начало в конце предыдущего звена (1-я в центре окна) и конец, определяемый приращением угла в радианах и приращением длины соответствующим координатами точки (по модулю 100); звенья рисуются не отрезками, а сплайнами Безье (дополнительные точки сплайна для каждой точки Xi определяются как 1/2(Xi+1 - Xi-1)). Вычисления – число витков спирали. Характеристика графики – текущее число витков спирали. 16. Параметры – координаты точки на плоскости, компоненты rgb-цвета. Графика – ломанная, у которой каждое звено имеет начало в конце предыдущего звена (1-я в центре окна), угол в радианах и длину, определяемые координатами точки, и заданный цвет. Вычисления – длина ломанной. Характеристика графики – текущая длина построенной ломанной. 17. Параметры – координаты точки на плоскости, компоненты rgb-цвета. Графика – квадраты с центром в центре окна, для каждого из которых точкой задана одна из вершин и который окрашен в заданный цвет, но прозрачен для находящихся под ним квадратов. Вычисления – площадь объединения квадратов. Характеристика графики – текущая площадь объединения квадратов. 18. Параметры – координаты точки на плоскости, компоненты rgb-цвета. Графика – круги с центром в предыдущей точке и радиусом до следующей точки, каждый из которых окрашен в заданный цвет. Вычисления – максимальная площадь круга и его номер. Характеристика графики – текущая максимальная площадь круга и его номер. 19. Параметры – координаты точки на плоскости, компоненты rgb-цвета. Графика – прямоугольники, каждый из которых имеет центр в предыдущей точке, ширину и высоту, определяющиеся следующей точкой, и окрашен в заданный цвет. Вычисления – максимальная площадь прямоугольника и его номер. Характеристика графики – текущая максимальная площадь прямоугольника и его номер. 20. Параметры – координаты точки на плоскости, компоненты rgb-цвета. Графика – эллипсы, каждый из которых имеет центр в предыдущей точке, ширину и высоту, определяющиеся следующей точкой, и окрашен в заданный цвет. Вычисления – сумма длины границ эллипсов. Характеристика графики – текущая сумма длины границ эллипсов. 21. Параметры – координаты 3 точек на плоскости, компоненты rgb-цвета. Графика – треугольники, каждый из которых задан вершиной (1-я точка) и двумя сторонами (тангенс угла направления и длина определяются соответственно координатами 2-й или 3-й точки) и окрашивается в заданный элементом цвет. Вычисления – сумма площадей треугольников. Характеристика графики – текущая сумма площадей треугольников. 4 22. Параметры – координаты точки на плоскости, компоненты rgb-цвета. Графика – спираль, у которой каждое звено имеет заданный цвет, начало в конце предыдущего звена (1-я в центре окна) и конец, определяемый приращением угла в радианах и приращением длины соответствующим координатами точки (по модулю 100). Вычисления – длина спирали. Характеристика графики – текущая длина построенной спирали. 23. Параметры – координаты 3 точек на плоскости, компоненты rgb-цвета. Графика – треугольники, каждый из которых имеет вершины в точках элемента массива и окрашивается в заданный элементом цвет. Вычисления – сумма площадей треугольников. Характеристика графики – текущая сумма площадей треугольников. 24. Параметры – координаты 3 точек на плоскости, компоненты rgb-цвета. Графика – параллелограммы, каждый из которых определен 3-мя вершинами в точках и 2-мя сторонами, идущими из 1-й точки во 2-ю и 3-ю, и окрашивается в заданный элементом цвет. Вычисления – сумма площадей параллелограммов. Характеристика графики – текущая сумма площадей параллелограммов. 25. Параметры – координаты 2 точек на плоскости, компоненты rgb-цвета. Графика – квадраты, каждый из которых определен 2-мя противолежащими вершинами в точках и окрашивается в заданный элементом цвет. Вычисления – сумма площадей квадратов. Характеристика графики – текущая сумма площадей квадратов. 26. Параметры – координаты точек на плоскости, компоненты rgb-цвета. Графика – круги, каждый из которых имеет центр в центре окна и радиус до точки и окрашен в заданный цвет (прозрачен для находящихся под ним кругов). Вычисления – сумма длин окружностей. Характеристика графики – текущая сумма длин окружностей. 27. Параметры – координаты 2 точек на плоскости, компоненты rgb-цвета. Графика – прямоугольники, для каждого из которых 1-я точка задает вершину, а 2-я ширину и высоту прямоугольника, и который окрашен в заданный цвет. Вычисления – максимальное число взаимно пересекающихся прямоугольников. Характеристика графики – текущее максимальное число взаимно пересекающихся прямоугольников. 28. Параметры – координаты 2 точек на плоскости, компоненты rgb-цвета. Графика – ромбы, для каждого из которых точки задают вершины диагонали, а длина 2-й диагонали в 2 раза меньше 1-й, и который окрашен в заданный цвет. Вычисления – сумма периметров ромбов. Характеристика графики – текущая сумма периметров ромбов. 29. Параметры – координаты 2 точек на плоскости, компоненты rgb-цвета. Графика – прямоугольные треугольники, каждый из которых имеет вершину в 1-й точке, параллельные осям катеты, с длинами определяемыми соответствующими координатами 2-й точки, и окрашивается в заданный цвет. Вычисления – сумма длин периметров треугольников. Характеристика графики – текущая сумма длин периметров треугольников. 30. Параметры – координаты точки на плоскости, координаты rgb-цвета. Графика – разбиение на треугольники (начальное разбиение определяется диагоналями окна и окраской в чистые цвета красный, зеленый, голубой и черный), при котором для каждой следующей точки определяется треугольник, которому он принадлежит и он разбивается на 3 треугольника; цвета новых треугольников определяются как красный, зеленый и голубой. Вычисления – число треугольников разбиения. Характеристика графики – текущее число треугольников разбиения. 5 31. Параметры – координаты 3-х точек на плоскости, компоненты rgb-цвета. Графика – сегменты кругов, каждый из которых определяется центром в 1-й точке, радиусом во 2-й точке и лучами от центра через 2-ю и 3-ю точки. Вычисления – сумма площадей сегментов. Характеристика графики – текущая сумма площадей сегментов. 32. Параметры – координаты 5 точек на плоскости, компоненты rgb-цвета. Графика – 5-угольники с последовательными вершинами в 5 точках. Вычисления – максимальная площадь выпуклых оболочек каждого 5-угольника (наименьшего выпуклого многоугольника, содержащего вершины 5-угольника). Характеристика графики – текущий максимум площадей выпуклых оболочек. 33. Параметры – координаты 1-й точки на плоскости, компоненты rgb-цвета. Графика – ломанная с началом в центре окна, каждое звено которой имеет направление к следующей точки и длину звена, равную ½ расстояния до пересечения луча с границей окна (берется ближайшая точка с целыми координатами). Вычисления – длина ломанной. Характеристика графики – текущая длина ломанной. 34. Параметры – координаты 3 точек на плоскости, компоненты rgb-цвета. Графика – ромбы, каждый из которых имеет центр в 1-й точке, одну из вершин во 2-й точке и другую диагональ, длина которой определяется координатой x 3-й точки (координаты соответствующих вершин при необходимости округляются). Вычисления – сумма площадей вписанных в ромбы кругов. Характеристика графики – текущая сумма площадей вписанных кругов. 35. Параметры – координаты 2 точек на плоскости, компоненты rgb-цвета. Графика – прямоугольники, каждый из которых определен диагональю с вершинами в заданных 2 точках. Вычисления – сумма минимальных расстояний от каждого прямоугольника до границ рабочей области окна. Характеристика графики – текущая сумма минимальных расстояний от прямоугольников до границ окна. 36. Параметры – координаты 1 точки на плоскости, компоненты rgb-цвета. Графика – сплайн Безье с началом в центре окна, проходящем через каждую очередную точку (дополнительные точки сплайна вычисляются как ±1/2(xi+1– xi)). Вычисления – сумма абсолютных величин углов (в градусной мере), определяемых лучами из центра окна к 2-м последовательным точкам. Характеристика графики – текущая сумма углов. 37. Параметры – координаты 1 точки на плоскости, компоненты rgb-цвета. Графика – треугольники, каждый из которых имеет 1 вершину в очередной точке и 2 другие вершины в точках границ рабочей области окна, являющихся ближайшими для данной точки. Вычисления – сумма наибольших из острых углов (радианная мера) каждого треугольника. Характеристика графики – текущая сумма наибольших острых углов треугольников. 38. Параметры – координаты 2 точек на плоскости, компоненты rgb-цвета. Графика – кривая из дуг окружностей, каждая из которых имеет центр во 2-й точке, определенной для предыдущей дуги (для 1-й дуги – в центре окна), проходит через 1-ю точку от нее против часовой стрелки до направления луча из центра до 2-й точки. Вычисления – длина кривой. Характеристика графики – текущая длина кривой 39. Параметры – координаты 1 точки на плоскости, компоненты rgb-цвета. Графика – отрезки, соединяющие точки (x,0) и (0,y), где (x,y) – заданная точка. Вычисления – площадь максимальной выпуклой области окна, не содержащей точки отрезков в качестве внутренних точек области. Характеристика графики – текущая площадь максимальной выпуклой оболочки. 6 40. Параметры – координаты 1 точки на плоскости, компоненты rgb-цвета. Графика – выпуклая оболочка точек плоскости (наименьший выпуклый многоугольник, содержащий эти точки). Вычисления – площадь выпуклой оболочки. Характеристика графики – текущая площадь выпуклой оболочки. 41. Параметры – координаты 1 точки на плоскости, компоненты rgb-цвета. Графика – 4-угольники, каждый из которых образован пересечением тех выпуклых 4угольников, которые имеют вершины в заданной точке и 3 других углах окна. Вычисления – сумма площадей, определяемых 4-угольников. Характеристика графики – текущая сумма минимальных расстояний от прямоугольников до границ окна. 42. Параметры – координаты 1 точки на плоскости, компоненты rgb-цвета. Графика – треугольники с вершинами в 2 предыдущих вершинах предыдущего треугольника (для 1-го треугольника – 2 угла окна по диагонали слева-сверху направо-вниз) и в заданной точке. Вычисления – максимальный периметр треугольника. Характеристика графики – текущий максимальный периметр треугольника. 43. Параметры – координаты 1 точки на плоскости, номер квадранта из множества {1,2,3,4}, компоненты rgb-цвета. Графика – кривая – из дуг эллипсов, для каждого из которых диаметры определены координатами соответствующей точки, а дуга часть эллипса заданного квадранта и начинается в конце предыдущей дуги (начало 1-й дуги в центре окна). Вычисления – длина кривой. Характеристика графики – текущая длина кривой. 44. Параметры – координаты 2 точек на плоскости, компоненты rgb-цвета. Графика – равнобедренные треугольники, каждый из которых имеет 1 вершину в центре окна, 2-ю в 1-й точке и 2-е ребро, равное ребру 1-й вершины во 2-ю и направленное во 2ю точку. Вычисления – площадь объединения треугольников. Характеристика графики – текущая площадь объединения. 45. Параметры – координаты 2 точек на плоскости, компоненты rgb-цвета. Графика – фигуры, каждая из которых является объединением 2-х выпуклых 4-угольников, образованных 2 точками и одной из сторон окна. Вычисления – сумма площадей фигур. Характеристика графики – текущая сумма площадей фигур. 46. Параметры – координаты 2 точек на плоскости, компоненты rgb-цвета. Графика – треугольники, стороны каждого из которых состоят из отрезков диагоналей окна и отрезка прямой, проходящей через заданные точки. Вычисления – сумма периметров треугольников. Характеристика графики – текущая сумма периметров треугольников. 47. Параметры – координаты 3 точек на плоскости, компоненты rgb-цвета. Графика – секторы кругов, каждый из которых определен центром в 1-й точке, радиусом до 2й точки и лучами от центра через 2-ю и 3-ю точки (против часовой стрелки от луча 2-й точки). Вычисления – сумма контуров секторов. Характеристика графики – текущая сумма контуров секторов. 48. Параметры – координаты 5 точек на плоскости, компоненты rgb-цвета. Графика – 5-угольники с вершинами в 5 точках и последовательным обходом вершин. Вычисления – суммарное число точек самопересечение границы каждого 5-угольника. Характеристика графики – текущее суммарное число точек самопересечения границ каждого 5-угольника. 7 49. Параметры – координаты 3 точек на плоскости, компоненты rgb-цвета. Графика – 4-угольники с одной вершиной в центре окна и 3-мя вершинами в заданных точках (в направлении обхода). Вычисления – площадь объединения 4-угольников. Характеристика графики – текущая площадь объединения 4-угольников. 50. Параметры – координаты 1 точки на плоскости, компоненты rgb-цвета. Графика – максимальные квадраты с одной вершиной в заданной точке и остальными вершинами в области с границами (для 1-го квадрата - границы окна), куда попала точка. Вычисления – минимальная площадь квадрата. Характеристика графики – текущий минимум площадей квадратов. III. Функции многопоточности Для открытия и закрытия потоков применяются следующие функции: _beginthread(nameProcThread, 0, pParams) – открывает новый поток, связывая его с процедурой, задаваемой 1-м параметром, с параметрами процедуры, задаваемыми 3-м параметром (указатель на структуру параметров). _endthread() – завершение потока. В структуру параметров, которые передаются потоку, рекомендуется включать поле bKill для сообщения потоку о необходимости его прекратить (params.bKill=TRUE;). Для синхронизации потоков используются переменная критической секции ифункции: CRITICAL_SECTION cs; // описание переменной критической секции InitializeCriticalSection(&cs); // создание объекта критической секции EnterCriticalSection(&cs); // вход в критическую секцию (только один поток становится владельцем, другие потоки, вызывающие эту функцию, задерживаются LevelCriticalSection(); // поток, владеющий критической секцией, покидает ее (другой поток, ожидающий входа в критическую секцию, становится владельцем) DeleteCriticalSection(); // удаление объекта критической секции (переменная еще существует) Для синхронизации с помощью событий используется описатель события и функции: HANDLE hEvent; // переменная описатель события hEvent=CreateEvent(&sa, fManual, fInitial, pszName); // создание объекта событие; параметры: // sa – переменная типа SECURITY_ATRIBUTES (используется // между процессами; для одного процесса NULL); // fManual – реакция на возврат из функции WaitForSingleObject // (если нет необходимости – FALSE); // fInitial – начальное состояние события (TRUE – свободное; FALSE – занятое); // pszName – имя объекта события (используется между процессами; для одного процесса - NULL). SetEvent(hEvent); // делает объект свободным ResetEvent(); // делает объект занятым WaitForSingleObject(hEvent, dwTimeOut); // задержка при занятом событии либо до его освобождения, либо до истечения интервала времени, заданного вторым параметром (если второй параметр INFINITE, то бесконечное время ожидания); при занятом событии функция сразу же возвращает значение. 8