На этом шаге мы рассмотрим, как с помощью потоков
можно выполнять фоновые процедуры.
Рассмотренное нами приложение позволит набирать текст в редакторе одновременно с тем, как увеличивается и выводится на форму значение переменной. На форму следует поместить компоненты 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.
Текст этого примера можно взять здесь.
На следующем шаге мы рассмотрим пример программы, демонстрирующей опрос устройства с помощью потока.