Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
laba 2.doc
Скачиваний:
4
Добавлен:
24.11.2019
Размер:
199.68 Кб
Скачать

Приоритет процесса

Приоритет - это величина, определяющая, насколько данный процесс должен выполнятся быстрее по сравнению с другими. Т.е., другими словами, чем выше приоритет процесса, тем больше времени он отбирает у системы и других, параллельно работающих процессов. Далее разберем возможные значения свойства Priority класса TThread в порядке возрастания приоритета:

  • tpIdle - процесс выполняется только тогда, когда система не занята и больше нет работающих в данных момент процессов;

  • tpLowest - на два пункта ниже нормального;

  • tpLower - на один пункт ниже нормального;

  • tpNormal - нормальный. Такой приоритет у большинства задач;

  • tpHigher - на один пункт выше нормального;

  • tpHighest - на два пункта выше нормального;

  • tpTimeCritical - самый высокий приоритет - занимает все время процессора и системы. Это приоритет для систем реального времени, для которых важна каждая секунда и даже малейшая задержка может привести к сбою.

Пример. "Шаблон" для создания простейшего Thread-а.

{Определение класса TMyThread}

type

TMyThread = class(TThread)

private

{ Private declarations }

protected

procedure Execute; override;

end;

implementation

procedure TMyThread.Execute;

begin

{Код выполняемый в потоке}

end;

Важно отметить также, что если внутри потока происходит вывод строки на форму приложения (или любое изменение вида формы приложения), то необходимо этот код помещать в специальную процедуру, вызов которой должен происходить методом Synchronize.

Synchronize - используется для предотвращения одновременного доступа разных потоков к одному элементу VCL. Дело в том, что код VCL выполняется в главном потоке программы, так что поток должен синхронизироваться, если он использует код VCL. Параметр метода - это метод без параметров, который обычно принадле-жит Вашему потоковому классу.

Пример 1. Программа, определяющая является ли число простым с использованием собственного потока

Данная программа проверяет, является ли число простым двумя способами:

- обычным способом (алгоритм выполняется в обработчике кнопки, VCL поток);

- через поток (алгоритм выполняется в отдельном, специально созданном потоке).

Программа демонстрирует, что при обычном вычислении в VCL обработчики остальных событий приостанавливаются и ждут завершения вычислений. При вычислении в отдельном потоке работа алгоритма не останавливает работу всех обработчиков VCL, а работает параллельно с ними.

1. Поместите на форму две кнопки TButton, поле ввода TEdit, редактор TMemo, таймер TTimer и фигуру квадрата TShape. Измените свойства Caption компонент как показано на рисунке:

2. Перейдите в окно редактора кода и перед разделом var объявления глобальных переменных напишите код создания собственного класса (наследника TThread):

3. Далее следует добавить код объявленных в классе процедур:

3.1 Функция IsPrime проверяет: является ли число простым.

3.2 Функция Execute - главная процедура, выполняемая в теле потока

3.3 Процедура UpdateResults - выводит в поле Memo1 результат вычисления:

4. Объявить глобальную переменную Т1 - экземпляр класса TPrimeThrd.

В обработчик кнопки "Проверить через поток" добавить код:

5. В обработчик кнопки "Проверить обычно" вставить код:

6. Установить время таймера = 10. В обработчик Timer1 вставить код:

Необходимо также объявить глобальную переменную F типа bool:

Тестирование программы: при проверке числа обычным способом (кнопка "проверить обычно") квадрат замирает на время вычисления. При проверке числа нажатием на кнопку "проверить через поток" движение квадрата не прерывается.

По примеру лабораторной работы реализовать параллельное выполнение двух независимых задач.

Индивидуальные задания:

№ варианта

Задание

1

1. Алгоритм, определяющий является ли число простым.

2. Заполнение полосы ProgressBar (с произвольной скоростью).

2

1. Алгоритм, определяющий является ли число простым.

2. Плавное увеличение ширины элипса и затем плавное уменьшение.

3

1. Алгоритм, определяющий является ли число простым.

2. Рисование графика из случайных чисел (компонент TChart).

4

1. Алгоритм, определяющий является ли число простым.

2. Плавное увеличение размеров квадрата затем плавное уменьшение.

5

1. Алгоритм, определяющий является ли число простым.

2. Отображение текущего времени системы с точностью до миллисекунд (функция Now).

6

1. Алгоритм, определяющий является ли число простым.

2. Циклическое увеличение/уменьшение столбцов диаграммы (компонент TChart).

7

1. Алгоритм, определяющий является ли число простым.

2. Движение закрашенной окружности вертикально.

8

1. Алгоритм, определяющий является ли число простым.

2. Отображение координат курсора мыши в реальном времени.

9

1. Алгоритм, определяющий является ли число простым.

2. Циклическое увеличение/уменьшение значения переменной с заданным шагом по времени.

10

1. Алгоритм, определяющий является ли число простым.

2. Постепенная заливка прямоугольника цветом.

11

1. Алгоритм, определяющий является ли число простым.

2. Рисование графика функции Sin (компонент TChart).

12

1. Алгоритм, определяющий является ли число простым.

2. Циклическое заполнение строкового редактора Memo.

13

1. Алгоритм, определяющий является ли число простым.

2. Циклическое копирование строк из одного Memo в другое и обратно.

14

1. Алгоритм, определяющий является ли число простым.

2. Рисование графика функции Cos (компонент TChart).

15

1. Алгоритм, определяющий является ли число простым.

2. Показ видео - стандартный ролик копирования файлов (TAnimate)

16

1. Алгоритм, определяющий является ли число простым.

2. Показ видео - стандартный ролик удаления файлов (TAnimate)

17

1. Алгоритм, определяющий является ли число простым.

2. Движение квадрата по окружности.

18

1. Алгоритм, определяющий является ли число простым.

2. Перемещение надписи Label слева направо и обратно.

19

1. Алгоритм, определяющий является ли число простым.

2. Плавное изменение цвета двигающегося квадрата.

20

1. Алгоритм, определяющий является ли число простым.

2. Циклическое заполнение и очистка текстового поля RichEdit.