A
a_mao_gong
Unregistered / Unconfirmed
GUEST, unregistred user!
很久没来富翁,也很久没用delphi了。以下是我目前遇到的一个棘手问题,希望有做过多线程的富友帮忙解决一下。
我在主线程中定义了一个线程对象,定义是为了可以手动控制,我每次创建线程前先判断一下这个线程对象的是否为空,如果为空就创建,不为空就但还在运行。现在的问题是我在procedure Execute;
begin
inherited;
FreeOnTerminate := true;
case IsCluster of
0: ...;
1: ...;
2: ...;
end;
// end case
end;
加上了 FreeOnTerminate := true;
线程结束的也释放了占用的资源,但在主线程中写的
if not Assigned(Thread) then
begin
Thread := Thread.Create(true);
....
end
就永远不会执行了,这个时候看Thread对象指针并不为空,也就是说, FreeOnTerminate := true;这句话释放了线程所占用的资源,但线程对象的指针并没有被释放掉,现在我想知道有没有什么好的办法可以让线程自己结束自动释放线程对象指针?谢谢!
我在主线程中定义了一个线程对象,定义是为了可以手动控制,我每次创建线程前先判断一下这个线程对象的是否为空,如果为空就创建,不为空就但还在运行。现在的问题是我在procedure Execute;
begin
inherited;
FreeOnTerminate := true;
case IsCluster of
0: ...;
1: ...;
2: ...;
end;
// end case
end;
加上了 FreeOnTerminate := true;
线程结束的也释放了占用的资源,但在主线程中写的
if not Assigned(Thread) then
begin
Thread := Thread.Create(true);
....
end
就永远不会执行了,这个时候看Thread对象指针并不为空,也就是说, FreeOnTerminate := true;这句话释放了线程所占用的资源,但线程对象的指针并没有被释放掉,现在我想知道有没有什么好的办法可以让线程自己结束自动释放线程对象指针?谢谢!