Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабник по СПО

.pdf
Скачиваний:
9
Добавлен:
05.06.2015
Размер:
1.59 Mб
Скачать

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

13

 

 

 

 

 

 

 

 

 

 

 

 

 

Начало

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Поток 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Terminate

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

?

 

 

 

 

 

 

 

 

Да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Нет

 

 

 

Выход

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

24

 

Конец

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

?

 

 

 

Нет

 

 

 

 

?

 

 

 

 

 

 

 

Нет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Действует

 

 

 

 

Приоритет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

?

 

 

 

 

 

 

 

 

Нет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Да

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пуск

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Задание

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Запуск потоков

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

19

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

14

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Поток 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Поток 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Поток 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

While Not

 

 

 

 

 

 

 

 

 

 

 

While Not

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

While Not

 

 

 

 

 

Terminated

 

 

 

 

 

 

 

 

 

Terminated

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Terminated

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

15

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

20

 

 

 

 

 

 

 

 

 

 

 

 

Действия 1

 

 

 

 

 

 

 

 

 

 

 

 

Действия 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Действия 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

 

 

?

 

 

 

 

Да

 

 

 

 

 

 

 

 

 

 

 

 

21

?

 

 

 

 

 

 

 

 

 

16

 

 

?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Стоп

 

 

 

 

 

 

 

 

 

 

 

 

 

Стоп

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Стоп

 

12

 

 

 

 

Нет

 

 

 

 

 

 

 

17

 

 

 

 

 

Нет

 

 

 

 

 

 

 

 

 

 

 

 

22

 

 

 

 

Нет

 

 

 

 

 

 

 

 

Поток 1

 

 

 

 

 

 

 

 

 

 

 

Поток 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Поток 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

18

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

23

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Поток 2

 

 

 

 

 

 

 

 

 

 

Поток 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Terminate

 

 

 

 

 

 

 

Terminate

 

 

 

 

 

 

Рис.9.1. Схема программы, создающей три параллельных потока

1 Начало

 

2

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

4

 

 

 

Выбор

 

 

 

 

 

Вывод

 

 

 

 

 

 

 

 

N1:=N1+1

 

параметров

фигуры

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

Конец

 

 

 

 

 

 

 

 

 

 

Рис.9.2. Схема процедуры рисования фигуры

201

PDF created with pdfFactory Pro trial version www.pdffactory.com

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

Создание и запуск потоков должны происходить после команды Пуск. По умолчанию все потоки получают одинаковые приоритеты, равные приоритету процесса, их создающего. Для задания разных приоритетов потокам в схеме приложения предусмотрен блок 6. Приоритет потока должен задаваться после его создания.

Создание проекта

Создаём проект типа VCL Forms Application. Сохраняем проект в подготовленной заранее папке с именем Work9, присваиваем главному модулю имя MainUnit, а проекту - имя Thread3. Присваиваем главной форме имя MainForm.

Помещаем на форму три холста типа ТPaintBox, три метки для вывода числа нарисованных фигур, три списка типа ТComboBox для выбора приоритетов. В свойство Items каждого списка вводим семь приоритетов:

tpIdle tpLowest tpLower tpNormal tpHigher tpHighest tpTimeCritical

Холстам для рисования PaintBox1, PaintBox2 и PaintBox3 задаём размеры

150×150 пикселей.

Устанавливаем две кнопки: Пуск и Стоп для управления потоками, и кнопку Выход для закрытия программы. Вид окна программы показан на рис.9.3.

Рис.9.3. Окно программы с тремя потоками, рисующими фигуры

202

PDF created with pdfFactory Pro trial version www.pdffactory.com

Текст программы на языке Delphi

Написание текста проекта начинаем с создания процедуры рисования геометрических фигур и проверки их работы. Для каждого потока создадим отдельную процедуру рисования фигур.

Procedure TMainForm.CPaint1(Cv: TCanvas);

Var

J,I: Byte;

C: TColor;

Begin

Cv.Brush.Style:=bsSolid;

C:=Random(16777216);

J:=Random(30);

I:=Random(30);

Cv.Pen.Color:=C;

Cv.Brush.Color:=C;

Cv.Rectangle(J*5,I*5,J*5+5,I*5+5);

N1:=N1+1;

Label1.Caption:=IntToStr(N1)

End;

Procedure TMainForm.CPaint2(Cv: TCanvas);

Var

J,I: Byte; C: TColor;

Begin

Cv.Brush.Style:=bsSolid;

C:=Random(16777216);

J:=Random(30);

I:=Random(30);

Cv.Pen.Color:=C;

Cv.Brush.Color:=C;

Cv.Rectangle(J*5,I*5,J*5+10,I*5+10);

N2:=N2+1;

Label2.Caption:=IntToStr(N2)

End;

Procedure TMainForm.CPaint3(Cv: TCanvas);

203

PDF created with pdfFactory Pro trial version www.pdffactory.com

Var

J,I: Byte;

C: TColor;

Begin

Cv.Brush.Style:=bsSolid;

C:=Random(16777216);

J:=Random(14);

I:=Random(14);

Cv.Pen.Color:=C;

Cv.Brush.Color:=C;

Cv.Rectangle(J*10,I*10,J*10+19,I*10+20);

N3:=N3+1;

Label3.Caption:=IntToStr(N3);

End;

Для проверки и отладки работы процедур временно установим на форму таймер и с его помощью вызовем процедуры CPaint1, CPaint2 и CPaint3. Запустим проект и проверим работу процедур рисования фигур и вывода числа нарисованных элементов.

Procedure TfmThread.Timer1Timer(Sender: TObject);

Begin

CPaint1(PaintBox1.Canvas);

CPaint2(PaintBox2.Canvas);

CPaint3(PaintBox3.Canvas);

End;

Если не сделать опережающее включение генератора случайных чисел, то первое случайное число всегда будет равно нулю, т.е. цвет первого элемента будет чёрным. Генератор случайных чисел запускаем командой Randomize в процедуре OnCreate. Убеждаемся, что если при создании формы не включить процедуру Randomize, то первый квадратик всегда будет чёрным. После проверки работы процедур CPaint1, CPaint2 и CPaint3 таймер удаляем.

Затем создаём объект потока типа TNewThread. Добавление в проект объекта потока производим командой File New ... , вызывающей диалоговое окно New Items. В диалоговом окне New Items выбираем компонент Thread Object. В диалоговом окне ввода New Thread Object вводим название класса, например, TNewThread. Возникнет файл с пустым описанием класса TNewThread. Файл переименовываем командой Save As...,

например, в файл ThreadUnit.pas.

204

PDF created with pdfFactory Pro trial version www.pdffactory.com

Враздел Uses модуля MainUnit добавляем ссылку на модуль ThreadUnit.

Uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ThreadUnit, Buttons;

Враздел Implementation модуля ThreadUnit добавляем ссылку на модуль MainUnit.

Uses MainUnit;

Всписок переменных главной формы вводим переменные для описания потоков и хранения числа фигур.

Var

MainForm: TMainForm; T1,T2,T3: TNewThread; N1,N2,N3 :DWord;

Создаём основные процедуры, определяющие методы потоков. Для того чтобы потоки не продолжались бесконечно, вводим ограничения на число нарисованных фигур.

Procedure TfmThread.Paint1;

Begin

CPaint1(PaintBox1.Canvas);

Application.ProcessMessages; If N1>32000 Then T1.Terminate

End;

Создаём аналогичные процедуры для второго и третьего потоков.

Чтобы определять внутри потока метод, который нужно вызвать, добавим в класс

TNewThread переменную типа Byte.

Public

Box1 :Byte;

End;

Значение переменной Box1 определяет метод, вызываемый главным потоком.

Логика работы главного потока определяется его основным методом Execute, который необходимо переопределить.

Procedure TNewThread.Execute;

Begin

While Not Terminated Do Case Box1 Of

1:Synchronize(fmThread.Paint1);

205

PDF created with pdfFactory Pro trial version www.pdffactory.com

2:Synchronize(fmThread.Paint2);

3:Synchronize(fmThread.Paint3)

End;

If (N1>32000) And (N2>32000) And (N3>32000)

Then Begin fmThread.bbRun.Enabled := True;

fmThread.bbAbort.Enabled := False

End End;

Напишем обработчик нажатия кнопки Пуск.

Procedure TfmThread.bbRunClick(Sender: TObject);

Begin

bbRun.Enabled := False; bbAbort.Enabled := True; N1:=0; N2:=0; N3:=0;

PaintBox1.Canvas.Brush.Color:=clWhite;

PaintBox2.Canvas.Brush.Color:=clWhite;

PaintBox3.Canvas.Brush.Color:=clWhite;

PaintBox1.Canvas.Rectangle(0,0,150,150);

PaintBox2.Canvas.Rectangle(0,0,150,150);

PaintBox3.Canvas.Rectangle(0,0,150,150);

T1:=TNewThread.Create(True);

T1.Box1:=1;

T2:=TNewThread.Create(True);

T2.Box1:=2;

T3:=TNewThread.Create(True);

T3.Box1:=3;

{ ComboBox1Change(Sender);

ComboBox2Change(Sender);

ComboBox3Change(Sender); } T1.Resume;

T2.Resume;

T3.Resume

End;

206

PDF created with pdfFactory Pro trial version www.pdffactory.com

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

Процедуры ComboBox1Change, ComboBox2Change и ComboBox3Change задают приоритеты соответственно первому, второму и третьему потокам. Пока эти процедуры не написаны, их вызовы необходимо закомментировать. После написания процедур фигурные скобки комментария нужно удалить.

Для наглядности работы потоков перед их запуском очищаем поверхность холстов командой, заполняющей поверхность холстов белым цветом.

Пишем обработчик нажатия кнопки, останавливающей потоки.

Procedure TfmThread.bbAbortClick(Sender: TObject);

Begin

T1.Terminate;

T2.Terminate;

T3.Terminate; bbRun.Enabled := True; bbAbort.Enabled := False

End;

Создаём три процедуры задания приоритетов, отличающиеся только номерами потоков.

Procedure TfmThread.ComboBox1Change(Sender: TObject);

Begin

Case ComboBox1.ItemIndex Of

0:T1.Priority:=tpIdle;

1:T1.Priority:=tpLowest;

2:T1.Priority:=tpLower;

3:T1.Priority:=tpNormal;

4:T1.Priority:=tpHigher;

5:T1.Priority:=tpHighest;

6:T1.Priority:=tpTimeCritical

End

End;

При создании формы задаём начальные значения приоритетов и создаём потоки, но не запускаем их.

Procedure TfmThread.FormCreate(Sender: TObject);

207

PDF created with pdfFactory Pro trial version www.pdffactory.com

Begin

Randomize;

ComboBox1.ItemIndex:=3;

ComboBox2.ItemIndex:=3;

ComboBox3.ItemIndex:=3;

T1:=TNewThread.Create(True);

T1.Box1:=1;

T2:=TNewThread.Create(True);

T2.Box1:=2; T3:=TNewThread.Create(True); T3.Box1:=3

End;

Свойству Kind кнопки Выход присвоим значение bkCustom и введём в обработчик нажатия оператор Close, чтобы остановка потоков производилась до вызова команды закрытия программы.

Procedure TfmThread.bbCloseClick(Sender: TObject);

Begin

If bbAbort.Enabled = True Then bbAbortClick(Sender); Close

End;

Текст программы на языке С++

Создаём процедуру CPaint рисования геометрических фигур: линий, кругов и квадратов. Размеры стороны квадрата и радиуса круга принимаем равными 5 пикселей. Координаты фигур и длину линий выбираем случайно в диапазоне, определяемом размерами области рисования. Цвет фигур выбираем тоже случайно.

void __fastcall TMainForm::CPaint(TCanvas *Cv)

{

int J,I; TColor C;

Cv->Brush->Style=bsSolid; C=random(16777216); J=random(30); I=random(30);

Cv->MoveTo(random(150),random(150));

208

PDF created with pdfFactory Pro trial version www.pdffactory.com

Cv->Pen->Color=clYellow; Cv->LineTo(random(150),random(150)); Cv->Pen->Color=C; Cv->Brush->Color=C; Cv->Rectangle(J*5,I*5,J*5+15,I*5+15); Cv->Brush->Color=random(16777216); Cv->Ellipse(J*5,I*5,J*5+10,I*5+10); Label1->Caption=IntToStr(n1); Label2->Caption=IntToStr(n2); Label3->Caption=IntToStr(n3);

}

Для того чтобы процедура CPaint могла быть использована для рисования на разных холстах, в заголовке процедуры объявляем переменную типа TCanvas. При вызове процедуры формальную переменную заменяем именем фактического объекта.

Для проверки и отладки работы процедуры рисования временно установим на форму таймер и с его помощью запустим процедуру CPaint для рисования на холсте PaintBox1. void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

n1=n1+1; CPaint(PaintBox1->Canvas); Application->ProcessMessages();

}

Вызов функции ProcessMessages необходим, чтобы разрешить операционной системе обрабатывать очередь сообщений для данного потока. Одновременно с отладкой процедуры CPaint проводим проверку работы счётчика числа фигур, отображающего значение переменной n1.

Если не сделать опережающее включение генератора случайных чисел, то первое случайное число всегда будет равно нулю, и, следовательно, цвет первой фигуры всегда будет чёрным. Генератор случайных чисел запускаем командой Randomize в процедуре OnCreate. Убеждаемся, что если при создании формы не включить процедуру Randomize, то первый квадратик всегда будет чёрным. После проверки работы процедуры CPaint таймер удаляем.

Затем создаём объект потока типа TNewThread. Добавление в проект объекта потока производим командой File New ..., вызывающей диалоговое окно New Items. В диалоговом окне New Items выбираем компонент Thread Object. В диалоговом окне ввода

209

PDF created with pdfFactory Pro trial version www.pdffactory.com

New Thread Object вводим название класса, например, TNewThread. Возникнет файл с пустым описанием класса TNewThread. Файл переименовываем командой Save As..., например, в файл UnitThr.cpp.

Вфайл главной формы добавляем ссылку на заголовочный модуль потока. #include "UnitThr.h"

Вфайл потока добавляем ссылку на заголовочный модуль главной формы. #include "MainUnit.h"

Вописание класса главной формы вводим переменные для описания потоков, хранения числа фигур и регистрации запуска потоков и останова.

public: // User declarations

__fastcall TMainForm(TComponent* Owner); TNewThread *T1, *T2, *T3;

unsigned int n1,n2,n3; Byte St,Abrt;

};

Создаём основные процедуры, определяющие методы потоков: void __fastcall TMainForm::Paint1()

{

n1=n1+1; CPaint(PaintBox1->Canvas); Application->ProcessMessages();

}

void __fastcall TMainForm::Paint2()

{

n2=n2+1; CPaint(PaintBox2->Canvas); Application->ProcessMessages();

}

void __fastcall TMainForm::Paint3()

{

n3=n3+1; CPaint(PaintBox3->Canvas); Application->ProcessMessages();

}

210

PDF created with pdfFactory Pro trial version www.pdffactory.com

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]