![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
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
|