Создание потоков, используя Delphi-класс TThread (не прибегая к вызову функций Win32 API) (Лабораторная работа № 8)

Страницы работы

Содержание работы

8-я лабораторная

Задание:

Создать потоки, используя Delphi-класс TThread (не прибегая к вызову функций Win32 API).

Ход работы:

·  Для нового потока сначала наследуем новый класс TThread от базового класса TThread.

·  Выбрали File/New/Other

·  Выбрали значок Thread Object в появившемся диалоговом окне и щелкнули на кнопке OK

·  В появившемся окне New Thread Object ввели имя TPainterThread потомка класса TThread

·  После объявления нового класса, определили программный код, который будет им исполняться.

·  Затем, добавили код, чтобы хранить TThread переменную в глобальной переменной. Это позволит ссылаться на нее в вашем рабочем коде. Наконец, добавили действительный код для создания новых TThread и работы с ними. Этот код может исполнять функции по приостановке или возобновлению выполнения потока или даже его завершении.

·  Добавили на форму кнопку и изменили ее свойство Caption на Запуск потока, а Name на btStart.

·  Поставили ей в соответствие обработчик событий procedure TForm1.btStartClick(Sender: TObject);

·  Добавьте на форму кнопку и измените ее свойство Caption на Останов потока, а Name на btStop.

·  Поставили ей в соответствие обработчик событий procedure TForm1.btStopClick(Sender: TObject);

·  Добавили обработчик событий procedureTTestThread.Execute;

·  Поместили на форму компонент TEdit.

·  Добавили к модулю потока объявления: private переменной X, как Integer; процедуры DispX в объекте TTestThread (вслед за процедурой Execute).

·  Описали в методе DispX отображения числа Х.

·  Добавили изменения, которые необходимо было внести в метод Execute.

Листинг программы:

unit Main;

interface

uses

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

  StdCtrls, ThrdU;

type

  TMainForm = class(TForm)

    Edit1: TEdit;

    btStart: TButton;

    Memo1: TMemo;

    Label1: TLabel;

    Label2: TLabel;

    btStop: TButton;

    procedure btStartClick(Sender: TObject);

    procedure btStopClick(Sender: TObject);

  private

    { Private declarations }

    PT: TTestThread {TPainterThread};

  public

    { Public declarations }

  end;

var

  MainForm: TMainForm;

implementation

{$R *.DFM}

procedure TMainForm.btStartClick(Sender: TObject);

begin

  btStart.Enabled := False;

  btStop.Enabled := True;

  PT := TTestThread.Create(False);

end;

procedure TMainForm.btStopClick(Sender: TObject);

begin

  PT.Free;

  btStart.Enabled := True;

  btStop.Enabled := False;

end;

end.

//++++++++++++++++++++++++++++++++

unit ThrdU;

interface

uses

  Classes;

type

  TTestThread = class(TThread)

  private

    X: integer;

  protected

    procedure DispX;

    procedure Execute; override;

  end;

implementation

uses  SysUtils, Main;

{ TTestThread }

procedure TTestThread.DispX;

begin

  MainForm.Edit1.Text := InttoStr(X);

end;

procedure TTestThread.Execute;

begin

  Randomize;

  while (not Terminated) do begin

    X := Random (128);

    Synchronize (DispX);

  end;

end;

end.

Результаты программы:

Похожие материалы

Информация о работе

Тип:
Отчеты по лабораторным работам
Размер файла:
44 Kb
Скачали:
0