我有多线程应用程序。
procedure TGridUpdater.Execute;
begin
inherited;
CodeSite.Send('Thread executed');
sp := ConnectionFactory.GetConnection.LoadStoredProc('rab_itemData');
sp.CreateParam('Tahun', ftInteger, sppdInput).Value := _form.tahun;
sp.Open;
Synchronize(DoProgress1);
sp.DataSet.First;
I := 0;
CodeSite.Send('Terminated value is ' + BoolToStr(Terminated)); //The terminated property is 'True' here. Why?
while (not Terminated) and (not sp.DataSet.Eof) do
begin
CodeSite.Send('Entering loop');
Synchronize(DoProgress);
I := I + 1;
sp.DataSet.Next;
end;
Synchronize(DoProgress2);
end;
运行线程的方法
procedure TFRABData.RefreshDataset;
var
GridUpdater: TGridUpdater;
begin
GridUpdater := TGridUpdater.Create(True);
GridUpdater.OwnerForm := Self;
GridUpdater.Start;
CodeSite.Send('RefreshDataset executed');
GridUpdater.Free;
end;
您启动线程后立即释放它。你必须让它过自己的生活。所以为了回答你的问题,线程的析构函数设置了Terminated http://docwiki.embarcadero.com/Libraries/en/System.Classes.TThread.Terminated标志为 True。
procedure TFRABData.RefreshDataset;
var
GridUpdater: TGridUpdater;
begin
GridUpdater := TGridUpdater.Create(True);
GridUpdater.OwnerForm := Self;
GridUpdater.Start;
CodeSite.Send('RefreshDataset executed');
GridUpdater.Free; // <-- don't do this; let the thread live its own life
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)