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