TThread自终止,是否需要带有析构函数的OnTerminate?

问题描述

我有一个线程类来做一些工作,然后将消息发布到主应用线程并自行终止。正确的方法是什么,我需要一个OnTerminate过程还是Destructor足够?

(线程列表与问题无关,我想用它来检查有多少线程仍在工作)

FThread := TPicBuilder.Create(PicObject);
FThread.Resume;

Type TPicBuilder = class(TThread)
  protected
    procedure Execute; override;
  private
    MyPic: TBitmap32;
    procedure AddToPool;
    procedure RemoveFromPool;
    procedure MyTerminateHandler(Sender: TObject);
  public
    Constructor Create(Pic: Pointer);
    Destructor Destroy; override;
end;

Var PicThreads: TObjectList<TPicBuilder>;

implementation

Constructor TPicBuilder.Create(Pic: Pointer);
begin
  inherited Create(False);
  Self.FreeOnTerminate := True;
  Self.OnTerminate := MyTerminateHandler;
  MyPic:= TBitmap32(Pic);
  Synchronize(AddToPool);
end;

Destructor TPicBuilder.Destroy;
begin
  inherited Destroy;
  Synchronize(RemoveFromPool);
  // PostMessage(Application.Handle,WM_APicBuilt,0 {some tag goes here with a pic ID},0); // should I call this here instead?
end;

procedure TPicBuilder.AddToPool;
begin
  PicThreads.Add(Self);
end;

procedure TPicBuilder.RemoveFromPool;
begin
  PicThreads.Remove(Self);
end;

procedure TPicBuilder.MyTerminateHandler(Sender: TObject);
begin
  PostMessage(Application.Handle,0);
end;

Procedure TPicBuilder.Execute;
begin
  // thread work
end;

Initialization
  PicThreads := TObjectList<TPicBuilder>.Create(False);

Finalization
  PicThreads.Free;

end.

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)