首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么设置线程的Terminated属性?

为什么设置线程的Terminated属性?
EN

Stack Overflow用户
提问于 2012-09-25 10:49:42
回答 1查看 297关注 0票数 4

我有多线程应用程序。

代码语言:javascript
复制
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;

方法来运行线程

代码语言:javascript
复制
procedure TFRABData.RefreshDataset;
var
  GridUpdater: TGridUpdater;
begin
  GridUpdater := TGridUpdater.Create(True);
  GridUpdater.OwnerForm := Self;
  GridUpdater.Start;
  CodeSite.Send('RefreshDataset executed');
  GridUpdater.Free;
end;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-25 11:07:52

在启动线程后,您将立即释放它。你必须让它有自己的生命。因此,回答您的问题,是线程的析构函数将Terminated标志设置为True。

代码语言:javascript
复制
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;
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12575590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档