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

Министерство образования и науки РФ

Рязанский Государственный Радиотехнический Университет

Кафедра ЭВМ

Отчет

о лабораторной работе № 7

«Разработка приложений ОС Windows.

Создание многопоточных приложений»

по дисциплине «Объектно-ориентированное программирование»

Выполнили: студенты гр. 040 Иванов А.Д.,

Бугаков Р.В.. Проверили: Громов А. Ю.

Рязань 2012

Цель работы: ознакомиться с возможностями разработки многопоточных приложений в Delphi; разработать многопоточное приложение.

Пример 1. Текст модуля.

unit Main;

interface

uses

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

Dialogs, ComCtrls, StdCtrls, ExtCtrls;

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Button1: TButton;

Button2: TButton;

Button3: TButton;

TrackBar1: TTrackBar;

TrackBar2: TTrackBar;

Timer1: TTimer;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure TrackBar1Change(Sender: TObject);

procedure TrackBar2Change(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure Button3Click(Sender: TObject);

end;

var

Form1: TForm1;

Count1,Count2: integer; {число вычислений в секунду в потоке}

ThreadID1,ThreadID2:dword; {идентификатор создаваемого потока}

HThread1, HThread2: THandle; {указатель на создаваемый поток}

implementation

{$R *.dfm}

procedure Execute1;

var

i,Total,Avg:integer;

begin

while True do

begin

Total:=0;

for i:=1 to 10 do

inc(Total, Random(Maxint));

Avg:=Avg div 10;

inc(Count1);

end;

end;

procedure Execute2;

var

i,Total,Avg:integer;

begin

while True do

begin

Total:=0;

for i:=1 to 10 do

Inc(Total, Random(Maxint));

Avg:=Avg div 10;

Inc(Count2);

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

HThread1:=CreateThread(nil, 0, @Execute1, nil, 0, ThreadID1);

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

HThread2:=CreateThread(nil, 0, @Execute2, nil, 0, ThreadID2);

end;

procedure TForm1.TrackBar1Change(Sender: TObject);

begin

SetThreadPriority(HThread1,TrackBar1.Position);

end;

procedure TForm1.TrackBar2Change(Sender: TObject);

begin

SetThreadPriority(HThread1,TrackBar1.Position);

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

Edit1.Text:=IntToStr(Count1);

Count1:=0;

Edit2.Text:=IntToStr(Count2);

Count2:=0;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

Close;

end;

end.

Результаты выполнения программы:

Пример 2. Текст модуля:

unit Main;

Interface

uses

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

Dialogs, StdCtrls, ComCtrls, ExtCtrls, SimpleThread;

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Timer1: TTimer;

TrackBar1: TTrackBar;

TrackBar2: TTrackBar;

Label3: TLabel;

Label4: TLabel;

Button1: TButton;

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure TrackBar1Change(Sender: TObject);

public

Thread1, Thread2: TSimpleThread;

end;

var

Form1: TForm1;