Разработка многопоточных приложений. Рудалев В.Г - 5 стр.

UptoLike

5
Проиллюстрируем использование API из программ на Delphi следующей
лабораторной работой. Простой проект будет выполнять расчет традиционным
способом и, для сравнения , с помощью дополнительного потока.
Лабораторная работа 1
1. Создав новый проект, расположим на форме кнопки с надписями
«С потоком», «Без потока» , «Приостановить», «Продолжить».
2. Напишем функцию func и создадим обработчики событий так , чтобы
листинг модуля принял вид:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
var hThread: THandle; // Дескриптор потока
ThreadID: DWord; // Идентификатор потока
{$R *.DFM}
// Эта функция далее будет выполняться внутри потока
function func (p: pointer): longint; stdcall;
var i: integer;
dc: hDc;//дескриптор контекста графического устройства
s: string;
begin
dc:=GetDc(form1.handle);//Получаем контекст формы
for i:=0 to 10000000 do begin
s := IntToStr(i); // Выводим в цикле число,
         П роиллю стрируем исп ользованиеAPI изп рог рамм наDelphi следую щ ей
лаб ораторной раб отой. П ростой п роектб удетвы п олнять расчеттрадиционны м
сп особ ом и, для сравнения, сп омощ ью доп олнительног о п отока.

       Лаб о рато рн ая раб о та № 1

        1. Создав новы й п роект, расп олож им наф ормекноп киснадп исями
« С п отоком», « Безп отока», « П риостановить», « П родолж ить».
        2. Н ап иш ем ф ункцию func исоздадим об раб отчикисоб ы тий так, чтоб ы
листинг модуля п ринял вид:

       unit Unit1;
       interface
       uses
            Windows, Messages, SysUtils, Classes, Graphics, Controls,
      Forms, Dialogs, StdCtrls;

       type
         TForm1 = class(TForm)
            Button1: TButton;
            Button2: TButton;
            Button3: TButton;
            Button4: TButton;
            procedure Button1Click(Sender:        TObject);
            procedure Button2Click(Sender:        TObject);
            procedure Button3Click(Sender:        TObject);
            procedure Button4Click(Sender:        TObject);
         private
            { Private declarations }
         public
            { Public declarations }
         end;

       var
         Form1: TForm1;

       implementation

       var hThread: THandle; // Дескриптор потока
           ThreadID: DWord; // Идентификатор потока

       {$R *.DFM}

       // Эта функция далее будет выполняться внутри потока
       function func (p: pointer): longint; stdcall;
       var i: integer;
         dc: hDc;//дескриптор контекста графического устройства
         s: string;
       begin
         dc:=GetDc(form1.handle);//Получаем контекст формы
         for i:=0 to 10000000 do begin
             s := IntToStr(i); // Выводим в цикле число,

                                                                                   5