我正在Delphi(XE)中尝试多线程,并且遇到了在主VCL线程和第二个工作线程之间使用全局变量的问题.
我的项目涉及第二个工作线程,它扫描一些文件,并使用当前文件名更新globalvar字符串.然后通过主VCL线程上的计时器拾取此globalvar,并更新状态栏.
我注意到它偶尔会出现'无效的指针操作'......或'内存不足'或工作线程只是停止响应(可能是死锁).
因此,我创建了一个测试应用程序来识别并大大增加出错的可能性,以便我可以看到正在发生的事情.
type
TSyncThread = class(TThread)
protected
procedure Execute; override;
end;
var
Form11: TForm11;
ProgressString : String;
ProgressCount : Int64;
SyncThread : TSyncThread;
CritSect : TRTLCriticalSection;
implementation
{$R *.dfm}
procedure TForm11.StartButtonClick(Sender: TObject);
begin
Timer1.Enabled := true;
SyncThread := TSyncThread.Create(True);
SyncThread.Start;
end;
procedure TForm11.StopbuttonClick(Sender: TObject);
begin
Timer1.Enabled := false;
SyncThread.Terminate;
end;
procedure TForm11.Timer1Timer(Sender: TObject);
begin
StatusBar1.Panels[0].Text := 'Count: ' + IntToStr(ProgressCount);
StatusBar1.Panels[1].Text := ProgressString;
end;
procedure TSyncThread.Execute;
var
i : Int64;
begin
i := 0;
while not Terminated do …Run Code Online (Sandbox Code Playgroud)