Поток с доступом к глобальной переменной основной программы
Автор: Xavier Pacheco
Code: |
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. |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!