我在一个线程内动态创建TIdUDPClient,当这个线程执行完毕自动释放后,TIdUDPClient会不会自动Free掉??
你跟踪一下不就知道了!
不会自动释放掉。
Delphi中所有用类构造的对象、用New、GetMem获得的内存都要自己释放,因为他们都是存在堆上。
不管你在主线程还是其它线程创建的TIdUDPClient,它不会自动释放,
FS说的,线程有自己的栈空间没错,只是这些对象都在堆里面分配。
这是我写的线程释放的代码,曾经同时开过几百个没出现问题
with TTcpThread(TcpThreadList.Items[0]) do
begin
Terminate;
WaitFor;
Free;
end;
在线程的Execute()方法内设置FreeOnTerminate:=true就可以保证线程会自动释放掉.
想看线程是否被释放掉,可以按Ctrl+Alt+Del在Windows任务管理器里面看有没有和你创建的线程同名的不就知道了吗?
如果它的 Owner 被释放,则它也被自动释放