Создание многопоточных приложений. Копытин А.В - 9 стр.

UptoLike

Составители: 

9
необходимые изменения в свойство Text поля редактирования, с
последующим вызовом этого метода с помощью процедуры Synchronize.
Предположим, этот метод называется GiveAnswer. В листинге 1 представлен
полный исходный код модуля ThrdU, который включает программную реализа-
цию процесса обновления упомянутой выше строки редактирования на главной
форме.
Листинг 1. Модуль ThrdU.PAS
unit ThrdU;
interface
uses
Classes;
type
TTestThread = class(TThread)
private
Answer: integer;
protected
procedure GiveAnswer;
procedure Execute; override;
end;
implementation
uses SysUtils, Main;
{TTestThread}
procedure TTestThread.GiveAnswer;
begin
MainForm.Editl.Text := InttoStr(Answer);
end;
procedure TTestThread.Execute;
var i: Integer;
begin
FreeOnTerminate := True;
for i := 1 to 2000000 do
begin
if Terminated then Break;
Inc(Answer, Round(Abs(Sin(Sqrt(i)))));
Synchronize(GiveAnswer);
end;
end;
end.
                                       9
нео бх о димы е изменения в сво йство Text           по ля   редактиро вания,   с
по следую щ им вы зо во м этого методаспо мо щ ью про ц едуры Synchronize.
П редпо ло ж им, этотметод назы вается GiveAnswer. В листинге 1 представлен
по лны й исх о дны й ко д мо дуля ThrdU, ко торы й вклю чаетпро граммную реализа-
цию про цессао бно вления упо мянутой вы ш е стро ки редактиро вания наглавно й
фо рме.
Ли с т и н г 1. М одуль ThrdU.PAS
unit ThrdU;

interface

uses
  Classes;
type
  TTestThread = class(TThread)
  private
    Answer: integer;
  protected
    procedure GiveAnswer;
    procedure Execute; override;
  end;
implementation

uses SysUtils, Main;
{TTestThread}

procedure TTestThread.GiveAnswer;
begin
  MainForm.Editl.Text := InttoStr(Answer);
end;

procedure TTestThread.Execute;
var i: Integer;
begin
  FreeOnTerminate := True;
  for i := 1 to 2000000 do
  begin
    if Terminated then Break;
    Inc(Answer, Round(Abs(Sin(Sqrt(i)))));
    Synchronize(GiveAnswer);
  end;
end;

end.