Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пример отчета по Парраллельным вычислениям.doc
Скачиваний:
38
Добавлен:
18.09.2019
Размер:
288.77 Кб
Скачать

Список используемой литературы

1.Лекции по предмету «Параллельные и распределенные вычисления»

2. «Программирование в Delphi» А.Я.Архангельский,2008 г.

Приложение а

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ComCtrls, ExtCtrls;

type

TMoveThread = class(TThread)

private

FBox: TPaintBox; // Где воспроизводится картинка

b0,b1: tbitmap; // Сами картинки

i:integer; // Для определения координат картинки

procedure DoVisualSwap; // Одна процедура двигает вправо,

procedure DoVisual; // Другая влево

protected

procedure Execute; override;

public

constructor Create(a,b: TBitmap; c:TPaintBox);

destructor Destroy; override;

end;

type

TForm1 = class(TForm)

PaintBox1: TPaintBox;

PaintBox2: TPaintBox;

PaintBox3: TPaintBox;

TrackBar1: TTrackBar;

TrackBar2: TTrackBar;

TrackBar3: TTrackBar;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

Button5: TButton;

Button6: TButton;

Button7: TButton;

TrackBar4: TTrackBar;

Button8: TButton;

Button9: TButton;

procedure FormCreate(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button6Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure TrackBar1Change(Sender: TObject);

procedure Button7Click(Sender: TObject);

procedure FormDestroy(Sender: TObject);

procedure TrackBar4Change(Sender: TObject);

procedure Button8Click(Sender: TObject);

procedure Button9Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

Thread1,

Thread2,

Thread3:TMoveThread;

end;

var

Form1: TForm1;

var taxi00:TBitmap;

taxi01:TBitmap;

implementation

{$R *.dfm}

var speed:integer=0;

constructor TMoveThread.Create(a,b:tbitmap; c:TPaintBox);

begin

b0:=a;b1:=b;Fbox:=c;i:=0;

inherited Create(False);

end;

destructor TMoveThread.Destroy;

begin

b0.free;

b1.free;

inherited Destroy;

end;

procedure TMoveThread.DoVisualSwap; { Двигает картинку вправо }

begin

with FBox do

begin

canvas.Draw(i,0,b0);

i:=i+1;

sleep(speed);

end;

Application.ProcessMessages;

end;

procedure TMoveThread.DoVisual; { Двигает картинку влево }

begin

with FBox do

begin

canvas.Draw(i,0,b1);

i:=i-1;

sleep(speed);

end;

Application.ProcessMessages;

end;

procedure TMoveThread.Execute; {В зависимости от координат, картинка двигается

влево или вправо }

begin

while true do

begin

while i<=(fbox.Width+b0.Width) do

begin

Synchronize(DoVisualSwap);

end;

while i>=(0-b0.Width) do

begin

Synchronize(DoVisual);

end;

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

if Thread1.Suspended=true then Thread1.Resume;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

if Thread1.Suspended=false then Thread1.Suspend;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

if Thread2.Suspended=true then Thread2.Resume;

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

if Thread2.Suspended=false then Thread2.Suspend;

end;

procedure TForm1.Button5Click(Sender: TObject);

begin

if Thread3.Suspended=true then Thread3.Resume;

end;

procedure TForm1.Button6Click(Sender: TObject);

begin

if Thread3.Suspended=false then Thread3.Suspend;

end;

procedure TForm1.Button7Click(Sender: TObject);

begin

Thread1.Suspend;

Thread2.Suspend;

Thread3.Suspend;

end;

procedure TForm1.Button8Click(Sender: TObject);

begin

Form1.Close;

end;

procedure TForm1.Button9Click(Sender: TObject);

begin

if not Thread1.Suspended then

Thread1.Suspend;

if not Thread2.Suspended then

Thread2.Suspend;

if not Thread3.Suspended then

Thread3.Suspend;

Thread1.i:=0;

Thread2.i:=0;

Thread3.i:=0;

PaintBox1.Refresh;

PaintBox2.Refresh;

PaintBox3.Refresh;

Thread1.Resume;

Thread2.Resume;

Thread3.Resume;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

{}

taxi00:=tbitmap.Create; // Создается объект BitMap

taxi00.LoadFromFile('taxi00.bmp'); //В него загружается изображение

taxi01:=tbitmap.Create;

taxi01.LoadFromFile('taxi01.bmp');

thread1:= TMoveThread.Create(taxi00,taxi01,PaintBox1); //Создается поток

Thread1.Priority:=tpLowest; // Устанавливается небольшой приоритет у потока; это необходимо для того, чтобы поток был управляемым и не забирал все ресурсы.

thread2:= TMoveThread.Create(taxi00,taxi01,PaintBox2); //Создается поток

Thread2.Priority:=tpLowest;

thread3:= TMoveThread.Create(taxi00,taxi01,PaintBox3); //Создается поток

Thread3.Priority:=tpLowest;

end;

procedure TForm1.FormDestroy(Sender: TObject);

begin

taxi00.Free;

Taxi01.Free;

Thread1.Terminate;

Thread2.Terminate;

Thread3.Terminate;

end;

procedure TForm1.TrackBar1Change(Sender: TObject);

var I: integer;

priority:TThreadPriority;

{ Изменение приоритета соответствующего потока }

begin

priority:=tpIdle;

for i:=0 to ((sender as ttrackbar).position -1) do inc(priority);

if sender=trackbar1 then thread1.priority:=priority

else

if sender=trackbar3 then thread3.priority:=priority

else thread2.Priority:=priority;

end;

procedure TForm1.TrackBar4Change(Sender: TObject);

begin

speed:=round(TrackBar4.Position/10);

end;

end.