Шаг 7.
Организация потоков в Delphi-приложениях.
Пример: фоновая работа потока

    На этом шаге мы рассмотрим, как с помощью потоков можно выполнять фоновые процедуры.

    Рассмотренное нами приложение позволит набирать текст в редакторе одновременно с тем, как увеличивается и выводится на форму значение переменной. На форму следует поместить компоненты TRichEdit, TLabel и два компонента TButton. Вид формы представлен на рис. 1.


Рис.1. Вид формы приложения

    Проект приложения содержит два модуля. Текст модуля Main.

unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls, MyThread;

type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
    co:TCountObj; //объявляем объект потока
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation


{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
 //cоздаем поток
 co:=TCountObj.Create(true);
 //запускаем поток
 co.Resume;
 co.Priority:=tpLower;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 //останавливаем поток
 co.Terminate;
end;

end.

    Текст модуля MyThread.

unit MyThread;

interface

uses
  Classes, Sysutils;

type
  TCountObj = class(TThread)
  private
    { Private declarations }
    index:Integer;
    procedure UpdateLabel;
  protected
    procedure Execute; override;
  end;

implementation

uses Main;

{ TCountObj }

procedure TCountObj.Execute;
begin
 index:=1;
 while index>0 do
  begin
   Synchronize(UpdateLabel);
   Inc(index);
   if index>100000 then
    index:=0;
   if terminated then exit;
  end;
end;

procedure TCountObj.UpdateLabel;
begin
 Form1.Label1.Caption:=IntToStr(Index);
end;

end.

    Текст этого примера можно взять здесь.

    На следующем шаге мы рассмотрим пример программы, демонстрирующей опрос устройства с помощью потока.




Предыдущий шаг Содержание Следующий шаг