
Министерство образования и науки РФ
Рязанский Государственный Радиотехнический Университет
Кафедра ЭВМ
Отчет
о лабораторной работе № 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;