Поток с доступом к глобальной переменной основной программы

Материал из DRKB

Поток с доступом к глобальной переменной основной программы[править | править код]

unit Main;

interface

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

type
 TMainForm = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 MainForm: TMainForm;

implementation

{$R *.DFM}

{ NOTE: Change GlobalStr from var to threadvar to see difference }
var
 //threadvar
 GlobalStr: string;

type
 TTLSThread = class(TThread)
 private
   FNewStr: string;
 protected
   procedure Execute; override;
 public
   constructor Create(const ANewStr: string);
 end;

procedure SetShowStr(const S: string);
begin
 if S = '' then
   MessageBox(0, PChar(GlobalStr), 'The string is...', MB_OK)
 else
   GlobalStr := S;
end;

constructor TTLSThread.Create(const ANewStr: string);
begin
 FNewStr := ANewStr;
 inherited Create(False);
end;

procedure TTLSThread.Execute;
begin
 FreeOnTerminate := True;
 SetShowStr(FNewStr);
 SetShowStr('');
end;

procedure TMainForm.Button1Click(Sender: TObject);
begin
 SetShowStr('Hello world');
 SetShowStr('');
 TTLSThread.Create('Dilbert');
 Sleep(100);
 SetShowStr('');
end;

end.


Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 00307