Студенческий сайт КФУ - ex ТНУ » Учебный раздел » Учебные файлы »ПРОГРАММИРОВАНИЕ

Использование потоков в приложениях Microsoft Windows

Тип: курсовая работа
Категория: ПРОГРАММИРОВАНИЕ
Скачать
Купить
Разработка программы, которая создает в отдельном потоке случайный массив целых чисел в заданном диапазоне и выводит на экран эти числа. Описание общего алгоритма, интерфейс программы. Методы решения и алгоритмы задач, реализуемых каждым потоком.
Краткое сожержание материала:

Размещено на

Содержание

  • Задание
  • 1.1 Описание общего алгоритма
  • 1.2 Интерфейса программы
  • 2. Описание методов решения и алгоритмов задач, реализуемых каждым потоком
  • 2.1 Метод заполнения массива случайными числами
  • 2.2 Метод вычисления минимальных и максимальных значений
  • 2.3 Метод вычисления отклонений каждого значения от среднего арифметического
  • 3. Описание методов создания, уничтожения и синхронизации потоков, примененных в программе
  • 3.1 Создание потоков
  • 3.2 Синхронизация потоков
  • 3.3 Завершение потоков
  • 4 Листинг программы
  • Заключение
  • Список использованной литературы

Задание

Разработать программу, которая создает в отдельном потоке случайный массив А из N целых чисел в диапазоне от - 999 до 999 выводит на экран эти числа. Создание и вывод элементов массива производится через заданное время T, N и T вводятся пользователем до запуска процесса. Массив обрабатывается двумя другими потоками В и С, работающими параллельно с потоком, создающим массив. Все потоки выводят результаты своей работы в текстовые окна, каждый поток в свое окно.

Задание B

Задание C

Вычисление минимального и максимального значений

Вычисление отклонений каждого значения от среднего арифметического

1. Описание общего алгоритма и интерфейса программы

1.1 Описание общего алгоритма

Диаграмма 1 - выполнение потоков

При нажатии кнопки "START", считываются данные с полей "N" и "Time", создаются новые объекты потоков и отправляется сигнал на их запуск.

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

При закрытии программы или нажатии кнопки "STOP" потоки уничтожаются.

Диаграмма 1, показывает состояние потоков в течение времени выполнения.

1.2 Интерфейса программы

На главной форме располагается группа компонентов для ввода и вывода значений:

- Три поля (Thread1, Thread2, Thread3) для вывода значений

- "N" - указывает размерность массива

- "Time" - количество времени, через которое будут выводиться результаты в текстовые поля (Thread1, Thread2, Thread3).

Кнопка "START" создает потоки, в которых происходит вычисления среднего арифметического каждой тройки чисел массива и произведений каждого числа на его номер (индекс). Результаты выводятся на главной форме в поля (Thread1, Thread2, Thread3).

Кнопка "STOP" останавливает запущенные потоки.

Кнопка "EXIT" закрывает программу, при запущенных потоках уничтожает их.

поток программа интерфейс алгоритм

Рисунок 1 - Главная форма

2. Описание методов решения и алгоритмов задач, реализуемых каждым потоком

2.1 Метод заполнения массива случайными числами

Блок-схема 1 - Заполнение массива случайными числами от - 999 до 999

2.2 Метод вычисления минимальных и максимальных значений

Блок схема 3 - Вычисление минимального и максимального значения

Пример 1. Дан массив A = {-359, 126, 803, 913, - 716};

Решение:

Начальные значения min = 0, max = - 359;

A [1]

-359

126

803

913

-716

359 < min (0); min = - 359

359 > max (-359); max = - 359

A [2]

-359

126

803

913

-716

126 < min (-359); min = - 359

126 > max (-359); max = 126

A [3]

-359

126

803

913

-716

803 < min (-359); min = - 359

803 > max (126); max = 803

A [4]

-359

126

803

913

-716

913 < min (-359); min = - 359

913 > max (803); max = 913

A [5]

-359

126

803

913

-716

716 < min (-359); min = - 716

716 > max (803); max = 913

Ответ: min = - 716, max = 913.

2.3 Метод вычисления отклонений каждого значения от среднего арифметического

Для вычисления отклонений всех чисел выполним следующие действия:

1. Находим среднее арифметическое;

2. Для вычисления отклонение из данного набора чисел вычитаем среднее арифметическое.

Среднее арифметическое нескольких величин - это отношение суммы величин к их количеству.

Среднее арифметическое находится по формуле

(2)

(3)

Пример 2. Дан массив A = {-359, 126, 803, 913, - 716};

Найти отклонений всех чисел от среднего арифметического.

Решение:

Сумма чисел в массиве (2):

Вычисление отклонения (3):

Блок схема 2 - Вычисление отклонений каждого значения от среднего арифметического

3. Описание методов создания, уничтожения и синхронизации потоков, примененных в программе

3.1 Создание потоков

Для создания многопоточных приложений в C++Builder реализован абстрактный класс TThread.

TThread - абстрактный класс, который допускает создание отдельных потоков выполняющихся в приложении.

Создайте потомка класса TThread, чтобы представить выполняемый поток в многопоточном приложении.

Каждый новый экземпляр потомка TThread - новый поток выполнения.

Множество экземпляров, полученные от класса TThread, делает C++Builder многопоточным приложением.

__fastcall TMyThread:: TMyThread (bool CreateSuspended)

: TThread (CreateSuspended)

{

}

// ---------------------------------------------------------------------

// B метод объекта Execute (), вставьте код, который должен выполняться, когда поток выполняется.

void __fastcall TMyThread:: Execute ()

{

// -- - Place thread code here - ---

}

// ----------------------------------------------------------------------

Для получения безопасного доступа к управлению свойствами и методами VCL-объектов в потоке предусмотрен метод Synchronize ()

// ---------------------------------------------------------------------------

void __fastcall ThreadLenghtLine:: Execute ()

{

FreeOnTerminate = true; // освободить занятую потоком память по окончании его работы

int ColN = N/6;

while (true) {

sum = 0;

WaitForSingleObject (FMain->g_BusyEvent [1], INFINITE); // ждём разрешение на обработку

ResetEvent (FMain->g_BusyEvent [1]); // запрещаем переформирование массива

ResetEvent (FMain->g_BusyEvent [0]); // запрещаем переформирование массива

for (int i = 0; i<ColN*6;) { // считаем длину

sum += CalcLengthL...

Другие файлы:

Использование потоков в приложениях Windows
Описание общего алгоритма и интерфейса программы. Метод заполнения массива случайными числами. Метод вычисления длины линии между пространственными то...

Windows ХР для бывалого бойца
Книга посвящена Windows ХР — новейшей версии Microsoft Windows. Популярно рассказано об истории ОС Windows, настройке Windows XР и корпоративной мигра...

Windows 8 Secrets
Windows 8 Secrets is the ultimate insider’s guide to Microsoft’s most exciting Windows version in years. Microsoft is introducing a major new release...

Microsoft Windows 7 In Depth
Microsoft Windows 7 In Depth is the comprehensive guide to Microsoft's Windows 7 for everyone who's no longer a Windows beginner: corporate, small off...

Introducing Microsoft Windows Vista
Introducing Microsoft Windows Vista presents Microsoft Windows Vista, the latest version of the Windows operating system, and provides a comprehensive...