对于多线程的的一些疑惑,大家帮助一下 (100分)

  • 主题发起人 fhqkhnzh
  • 开始时间
F

fhqkhnzh

Unregistered / Unconfirmed
GUEST, unregistred user!
我用多线程写了一个搜索文件的程序,当搜索完毕后,线程停止,这时用 Assigned(MyThread)
判断值为TRUE,说明这个实例还在,如何在线程停止后释放这个实例.
我在主线程中是这样调用的
procedure TForm1.Button4Click(Sender: TObject);
begin

MyThread:= TMyThread.Create();
MyThread.Priority := tpIdle;
MyThread.Resume;

end;
如果我国连续按BUTTON4会造成内存泄露吗,有必要在线程停止后每次都释放线程对象,也就
是Assigned(MyThread)为FALSE吗?
我看到很多源码和资料都没有释放.
 
MyThread:= TMyThread.Create();
MyThread.FreeOnTerminate := True;
MyThread.Priority := tpIdle;
MyThread.Resume;
设置线程对象的FreeOnTerminate属性为True,当线程中止的时候会自动释放
 
use ExitThread
 
设定 FreeOnTerminate 为 true 可以在线程结束后释放该线程对象。
MyThread实际上是个指针,Assigned(MyThread)为true只说明这个指针
仍然指向一个地址,但这个地址有可能已经无效了。
可以在线程结束后发条消息给主线程,在对应的处理过程中把 Mythread
置为nil.
 
那可不可以不把 Mythread
置为nil呢?.
 
释放后应该是 nil,但不要这样做,
终止后可以
Mythread.Free;
 
你最好把MyThread作为局部变量,这样“连续按BUTTON4”就不会有问题,而且是多线程。不过
这样有可能要考虑资源访问的互斥。
 
多人接受答案了。
 
顶部