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

UptoLike

9
показано на листинге. В форме определите метод OutMessage. Внешний вид рабо-
тающего приложения показан на рисунке.
unit ThrdUnit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, ComCtrls, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
type // Объявление класса потока-потомка
TSimpleThread = class(TThread)
procedure Execute; override;
public
// Здесь удобно добавить любые поля и методы,
//которые будут использоваться локально, внутри потока
Count: Integer; // счетчик цикла
procedure OutMessage;
end;
procedure TSimpleThread.Execute;
begin
// Содержание потока
while not Terminated do begin//Поток будет выполняться,
// пока не будет нажата кнопка Button2
Count := Count+1;
Synchronize(OutMessage); // Безопасный вывод
end;
end;
procedure TSimpleThread.OutMessage;
begin
Form1.Edit1.Text:=IntToStr(count); // Обращение к VCL
end;
var Thread1: TSimpleThread; // Экземпляр класса «поток»
procedure TForm1.Button1Click(Sender: TObject);
п оказано налистинг е. В ф ормеоп ределитеметод OutMessage. В неш ний видраб о-
таю щ ег о п рилож ения п оказан нарисунке.

      unit ThrdUnit;
      interface
      uses
          Windows, Messages, SysUtils, Classes, Graphics, Controls,
    Forms, Dialogs, ComCtrls, StdCtrls, ExtCtrls;
      type
        TForm1 = class(TForm)
           Edit1: TEdit;
           Button1: TButton;
           Button2: TButton;
           procedure Button1Click(Sender: TObject);
           procedure Button2Click(Sender: TObject);
        private
           { Private declarations }
        public
           { Public declarations }
      end;

      var
        Form1: TForm1;

      implementation

      {$R *.DFM}
      type     // Объявление класса потока-потомка
        TSimpleThread = class(TThread)
          procedure Execute; override;
        public // Здесь удобно добавить любые поля и методы,
         //которые будут использоваться локально, внутри потока
           Count: Integer; // счетчик цикла
           procedure OutMessage;
        end;

      procedure TSimpleThread.Execute;
      begin
        // Содержание потока
       while not Terminated do begin//Поток будет выполняться,
                      // пока не будет нажата кнопка Button2
           Count := Count+1;
           Synchronize(OutMessage); // Безопасный вывод
        end;
      end;

      procedure TSimpleThread.OutMessage;
      begin
        Form1.Edit1.Text:=IntToStr(count); // Обращение к VCL
      end;

      var Thread1: TSimpleThread; // Экземпляр класса «поток»

      procedure TForm1.Button1Click(Sender: TObject);
                                                                              9