Z zw84611 Unregistered / Unconfirmed GUEST, unregistred user! 2001-02-28 #1 如果我在一个父线程中创建了多个子线程,假定子线程运行需要较长时间, 当我强制终止父线程时,子线程也会终止吗? 如果我关闭了程序,线程还会继续运行吗?
W wqhuo Unregistered / Unconfirmed GUEST, unregistred user! 2001-03-25 #2 如果使用Delphi的TThread作为父类派生的线程,父线程创建子线程后,父线程结束, 子线程不会自动销毁。 当然,当关闭程序后,属于该进程的线程回全部被销毁,但是在线程中分配的内存资 源有可能不会释放。
如果使用Delphi的TThread作为父类派生的线程,父线程创建子线程后,父线程结束, 子线程不会自动销毁。 当然,当关闭程序后,属于该进程的线程回全部被销毁,但是在线程中分配的内存资 源有可能不会释放。
R Richy Unregistered / Unconfirmed GUEST, unregistred user! 2001-04-10 #4 理论上说,一个进程撤消时,它所有的线程(资源)也应该被撤消了;因为线程的 堆栈(内存资源)是在进程的地址空间内的,进程空间被撤消,当然它的线程的堆 栈也被撤消。但有可能进程被非法终止,这时线程被强制撤消,导致一些对象的析 构函数没有被调用,这可能会有潜在危险。
理论上说,一个进程撤消时,它所有的线程(资源)也应该被撤消了;因为线程的 堆栈(内存资源)是在进程的地址空间内的,进程空间被撤消,当然它的线程的堆 栈也被撤消。但有可能进程被非法终止,这时线程被强制撤消,导致一些对象的析 构函数没有被调用,这可能会有潜在危险。
E elan Unregistered / Unconfirmed GUEST, unregistred user! 2001-04-10 #5 说一下我的问题: 我建了一个线程,当该线程结束运行时,所分配的内存都能被释放(通过 destroy 方法)。 但是考虑到有可能需要中途结束线程,所有又加了一个方法 suspend; if Msg("do you want to cancel").... then terminate else resume; 按照delphi帮助的说法, terminate方法并不立即杀掉线程,而是需要在execute或其他循环中 判断 terminated 属性来结束。但是我的程序每次执行到上述语句的时候,线程就自动杀掉了。 在execute或其他循环中的语句 : if terminated then free ; 根本没有被执行。结果线程分配的内存无法释放。即使我在terminate 语句之前加上一个子过程 dofree()来释放所分配的内存,用mrymanager监测的结果还是没有释放资源。 请问如何能够释放线程分配的内存?
说一下我的问题: 我建了一个线程,当该线程结束运行时,所分配的内存都能被释放(通过 destroy 方法)。 但是考虑到有可能需要中途结束线程,所有又加了一个方法 suspend; if Msg("do you want to cancel").... then terminate else resume; 按照delphi帮助的说法, terminate方法并不立即杀掉线程,而是需要在execute或其他循环中 判断 terminated 属性来结束。但是我的程序每次执行到上述语句的时候,线程就自动杀掉了。 在execute或其他循环中的语句 : if terminated then free ; 根本没有被执行。结果线程分配的内存无法释放。即使我在terminate 语句之前加上一个子过程 dofree()来释放所分配的内存,用mrymanager监测的结果还是没有释放资源。 请问如何能够释放线程分配的内存?
P PYH Unregistered / Unconfirmed GUEST, unregistred user! 2001-04-14 #6 可用Onterminate事件,另外,要设置属性FreeOnTerminate:=false;
P pazee Unregistered / Unconfirmed GUEST, unregistred user! 2001-04-14 #7 线程的Constrator 函数的时候加上 FreeOnTerminate:= true; 线程结束的时候就会自动释放占用资源的。 否则,你只能手工释放。
B BornKilled Unregistered / Unconfirmed GUEST, unregistred user! 2001-04-14 #8 同意pyh 只能自己在释放线程里分配的内存 线程对象如果不是线程自己结束的而是被主进程杀掉的,多数情况都会造成内存泄漏 拿memproof试一下就知道了 可是麻烦的是一个多线程的程序往往需要杀掉某个线程,没有好法子啊 这就是为什么装windows的机器经常需要重起的原因 mysql的文档说他们的程序在NT下每开一个线程再杀掉就会丢失200多个字节 残念.......................... 我曾听说过做有的公司基于WEB数据应用的NT server 由于访问量大需要每天重起一次
同意pyh 只能自己在释放线程里分配的内存 线程对象如果不是线程自己结束的而是被主进程杀掉的,多数情况都会造成内存泄漏 拿memproof试一下就知道了 可是麻烦的是一个多线程的程序往往需要杀掉某个线程,没有好法子啊 这就是为什么装windows的机器经常需要重起的原因 mysql的文档说他们的程序在NT下每开一个线程再杀掉就会丢失200多个字节 残念.......................... 我曾听说过做有的公司基于WEB数据应用的NT server 由于访问量大需要每天重起一次
W wjiachun Unregistered / Unconfirmed GUEST, unregistred user! 2001-04-29 #9 提问者: 如果你还要继续讨论请定期提前你的帖子,如果不想继续讨论请结束帖子。 请认真阅读大富翁论坛规则说明 http://www.delphibbs.com/delphibbs/rules.asp
C cactus123456 Unregistered / Unconfirmed GUEST, unregistred user! 2001-06-07 #11 1 当我强制终止父线程时,子线程不会终止 2 如果我关闭了程序,线程不会继续运行
M maming Unregistered / Unconfirmed GUEST, unregistred user! 2001-06-20 #12 如果你的线程execute中用clientdataset的话, 您想在线程执行完后自动终止都难, 我现在就碰到这个问题, 真是难办请看http://www.delphibbs.com/delphibbs/dispq.asp?lid=571655
如果你的线程execute中用clientdataset的话, 您想在线程执行完后自动终止都难, 我现在就碰到这个问题, 真是难办请看http://www.delphibbs.com/delphibbs/dispq.asp?lid=571655
C Campo Unregistered / Unconfirmed GUEST, unregistred user! 2001-07-05 #13 强制终止父线程时,子线程不会终止 如果你关闭了程序,线程不会继续运行。 线程中加上FreeOnTerminate:= true 可以自动释放线程资源。 就算是程序有错误,都会释放。 否则自己释放(free)。
强制终止父线程时,子线程不会终止 如果你关闭了程序,线程不会继续运行。 线程中加上FreeOnTerminate:= true 可以自动释放线程资源。 就算是程序有错误,都会释放。 否则自己释放(free)。