Разработать программу, которая создает в отдельном потоке случайный массив А из N целых чисел
Задание:
Разработать программу, которая создает в отдельном потоке случайный массив А из N целых чисел в диапазоне от -999 до 999 выводит на экран эти числа. Создание и вывод элементов массива производится через заданное время T, N и T вводятся пользователем до запуска процесса. Массив обрабатывается двумя другими потоками В и С, работающими параллельно с потоком, создающим массив. Все потоки выводят результаты своей работы в текстовые окна, каждый поток в свое окно. Задание В. Вычисление минимального и максимального значений. Задание C. Вычисление отклонений каждого значения от среднего арифметического.
Описание общего алгоритма
создает в отдельном потоке случайный массив А из N целых чисел в диапазоне от -999 до 999 выводит на экран эти числа. Создание и вывод элементов массива производится через заданное время T, N и T вводятся пользователем до запуска процесса. Массив обрабатывается двумя другими потоками В и С, работающими параллельно с потоком, создающим массив. Все потоки выводят результаты своей работы в текстовые окна, каждый поток в свое окно.
Описание методов решения и алгоритмов задач, реализуемых каждым потоком Поток - объект внутри процесса, отвечающий за выполнение кода и получающий для этого процессорное время. Процесс - экземпляр выполняемого приложения. При запуске приложения происходит выделение памяти под процесс, в часть которой и загружается код программы.
В Delphi существует специальный класс, реализующий потоки - TThread. Это базовый класс, от которого надо наследовать свой класс и переопределять метод Execute.
Листинг. Пример описания методов объекта (из лабы)
type
MultiThread = class(TThread)
private
wordsStart : Pointer;
protected
procedure Execute; override;
public
constructor Create(Status: boolean);
Destructor Destroy; override;
end;
По этому описанию компилятор узнает о существовании процедур, поэтому вы можете их реализовывать в любом порядке, ошибок не будет.
Теперь разберемся с процедурой.
procedure MultiThread.Execute;
var t:integer;
begin
inherited;
for i:=1 to N do
A[i]:=random(1999)-1000;
Form1.Memo1.Text:=string(Form1.LabeledEdit2.text)+' ñëó÷àéíûõ çíà÷åíèé çàïèñàííûõ â A:';
for i:=1 to N do
Form1.Memo1.Lines.Add(inttostr(A[i]));
end;
данная процедура принадлежит классу TThread.
Описание методов создания, уничтожения и синхронизации потоков, примененных в программе
В секции классе public описывается конструктор служащий для создания и Destructor служащий для удаления
constructor MultiThread.Create(Status: boolean);
begin
inherited Create(Status);
end;
Запуск данного потока происходит следующим образом
MultiThread.Create(false);
Значение true в методе Create значит, что после создания класса поток автоматически запущен не будет.
С конструктором закончили, переходим к Destructor
destructor MultiThread.Destroy;
begin
// Освобождение памяти, если она получена
if wordsStart <> nil
then FreeMem(wordsStart);
inherited;
end;
Класс будет освобожден тогда, когда отпадет необходимость в последней ссылке на его интерфейсы. Т.е. вызывать его не нужно он сам сообразит что пора очистить память.