delphi多线程如果使用对于变量的访问会出现安全的问题。对于局部变量与对象内部变量,每个线程对象都会有拷贝,因此不会相互干扰,但是如果访问的是全局变量呢?
那么就会出现问题,全局变量的值就会无法确定。我们看一下列子
unit ThreadCopy;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
btn1: TButton;
edt1: TEdit;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
threadvar
GlobalStr : string;
type
TTLSThread=class(TThread)
private
FNewStr : string;
protected
procedure Execute;override;
public
constructor Create(const ANewStr : string);
end;
procedure SetGlobalStr(str : string);
begin
if str=' ' then
messagebox(0,PChar(GlobalStr),'this str