【发布时间】:2014-07-14 14:56:15
【问题描述】:
尽管suspended 属性设置为true,但我的线程类是自动启动的。 我有一个基类,它作为线程类的数组。这是我的班级声明。
Type
cSolution = Class(TThread)
Private
procedure FindLocalMinimum;
procedure AddWorker;
procedure RandomSortCompressors;
procedure FindBestNetwork;
Public
Network : cNetwork;
Workers : array of cWorker;
Compressors : array of cCompressorData;
IsAllWorkersDone : boolean;
ID : integer;
Procedure CreateWorkers;
Constructor Create; overload; // This constructor uses defaults
Constructor Create(aNetwork : cNetwork; aCompressors : array of cCompressorData); overload; // Copy constructor
Destructor Destroy; override; //Destructor
procedure Execute; override;
end;
implementation
/// <summary>Default constructer
/// </summary>
constructor cSolution.Create;
begin
inherited;
IsAllWorkersDone := false;
Suspended := true;
ID := 99;
end;
我在调用执行函数的地方和执行函数的开头添加了断点。我称之为的地方永远不会触发。但是执行函数本身的断点被触发了。当它被触发时,挂起的属性为假。
我是否缺少某些东西,或者当我不想让它自动启动时,为什么线程会自动启动。
【问题讨论】:
-
提示:
Execute应该被重写为受保护的方法,而不是提升为公共。将其公开是有风险的,因为其他代码可以直接调用它,这可能会导致意想不到的“效果”。
标签: multithreading delphi delphi-xe3