问题描述
我有一个线程类来做一些工作,然后将消息发布到主应用线程并自行终止。正确的方法是什么,我需要一个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 (将#修改为@)