delphi 不断创建线程,销毁线程,程序占用线程却不断增加,有没有朋友遇到并解决问题?

Fangyuanshan Fangyuanshan 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
之前在一个复杂的软件发现这个问题,后来专门编写了一个非常简单的例子,这个问题却存在,不知道如何解决。我用fastmm进行内存泄漏检查 ,没有发现可疑的内存泄漏,不知道有没有朋友知道如何解决这个问题?我的代码很简单
1,创建一个TThread对象,这个线程经过短暂的延时后退出,代码如下
constructor TTcpCmdThread.Create(CreateSuspended: Boolean);
begin
inherited Create(CreateSuspended);
end;

destructor TTcpCmdThread.Destroy;
begin

inherited;
end;

procedure TTcpCmdThread.Execute;
var
i:Integer;
begin
{ Place thread code here }
//self.FreeOnTerminate := True;
i:=0;
while(True)do
begin
Inc(i);sleep(1);
if i > 20 then Break;
end;

end;

2、主窗口用一个定时器定时创建新的线程,并在线程结束后销毁;
procedure TForm1.playcmd;
begin
FTcpCmdThread:=TTcpCmdThread.Create(true);
FTcpCmdThread.Resume;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
ret:Integer;
begin

if(fstatus = 0)then
begin
if(ftcpcmdthread = nil)then
begin
playcmd();
fstatus := 1;
end;
end
else if fstatus = 1 then
begin
ftcpcmdthread.WaitFor;
ftcpcmdthread.Free;
ftcpcmdthread:=nil;
fstatus:=0;
Inc(fcount);
label1.Caption := IntToStr(fcount);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
fstatus := 0;
fcount := 0;
end;

...全文

相关推荐

评论 8
收藏 已收藏
分享
返回顶部