Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




Protected

Type

Begin

Implementation

Var

Public

Type

Uses

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

TForm1 = class(TForm)

...

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

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

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

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

...

Form1: TForm1;

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

{$R *.DFM}

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

{Создание первого потока методом 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

...

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

...

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

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

end;

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




Поделиться с друзьями:


Дата добавления: 2014-12-08; Просмотров: 401; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.