Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Interface. , unit2; //подключение модуля Unit2






Uses

..., unit2; //подключение модуля Unit2

Type

TForm1 = class(TForm)

...

Public

procedure VivodFigur1; //объявление метода заполнения первой области

procedure VivodFigur2; //объявление метода заполнения второй области

procedure VivodFigur3; //объявление метода заполнения третьей области

procedure VivodFigur(Vf: TCanvas); //объявление метода заполнения области

...

Var

Form1: TForm1;

P1, P2, P3: potok; //объявление переменных для трех потоков

Implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject); //обработ. кнопки Старт

Begin

{Создание первого потока методом Create. Параметр True указывает, что за­­пуск осуществляется после вызова метода Resume, иначе (False) ‑ сразу после создания потока.}

p1: =potok.Create(true); //создание первого потока

p1.Priority: =tpHighest; {установка приоритета выполнения потока: tpIdle (при простое Windows), tpLowest/tpLower или tpHighest/tpHigher (на два/один пункта ниже или выше нормального), tpNormal (нормальный), tpTimerCritical (наивысший) }

p1.NPotoka: =1; //признак работы первого потока

p2: =potok.Create(true); p2.NPotoka: =2; P2.Priority: =tpNormal; //второй поток p3: =potok.Create(true); p3.NPotoka: =3; P3.Priority: =tpLowest; //третий поток

p1.Resume; p2.Resume; p3.Resume; //запуск 1, 2, 3 потоков

End;

procedure TForm1.VivodFigur(Vf: TCanvas); //вывод квадрата в области Vf

Var f: Trect; //объявление переменной записи с описанием квадрата

Begin Vf.Brush.Style: =bsSolid; //кисть рисует сплошную линию

Vf.Brush.Color: =rgb(random(256), random(256), random(256)); //цвет кисти

f.left: =random(90); f.top: =random(90); //координаты верхнего левого и

f.right: =f.left+10; f.bottom: =f.top+10; //нижнего правого углов квадрата

Vf.rectangle(f); //вывод квадрата в указанную параметром область

end; //конец процедуры

//процедуры вывода квадратов в 1, 2 и 3 области для рисования

procedure TForm1.VivodFigur1; begin VivodFigur(Paintbox1.Canvas); end; procedure TForm1.VivodFigur2; begin VivodFigur(Paintbox2.Canvas); end;

procedure TForm1.VivodFigur3; begin VivodFigur(Paintbox3.Canvas); end; procedure TForm1.Button2Click(Sender: TObject); //обработ. кнопки Финиш

begin Application.Terminate; {завершение работы приложения} end;

end. //конец модуля Unit1

unit Unit2; //модуль Unit2 с описанием потокового объекта Potok

...

Type

Potok = class(TThread) //объявление подкласса потока класса TThread

...

Protected

procedure Execute; override; //объявление метода выполнения потока

public NPotoka: byte; //объявление переменной с номером потока

End;

Implementation

uses unit1; //подключение модуля Unit1

...

procedure potok.Execute; //переопределение метода Execute

begin {Метод Synchronize синхронизует работу всех потоков. Он имеет па­ра­­­­метр ‑ имя метода (без параметров), выводящего квадрат в нужной области}

while not Terminated do //Terminated=True после Application.Terminate

case NPotoka of //анализ текущего номера потока

1: Synchronize(Form1.VivodFigur1); //выполнение первого потока

2: Synchronize(Form1.VivodFigur2); //выполнение второго потока

3: Synchronize(Form1.VivodFigur3); //выполнение третьего потока

end;

End;

end. //конец модуля Unit2






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.