关于Tthread的释放问题 请问,若在tthread类中使用了 FreeOnTerminate := true; 那么我还需要在主程序中显式地调用tthread.free来释放吗?另外,对于未使用FreeOnTerminate := true; 且已经挂起的线程,使用 Terminate; 后,还需要 用Resume 唤醒它,才能让它最后自释放吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第一个显式释放问题查到资料,貌似设了FreeOnTerminate:= true会自动释放整个tthread对象,看来是FASTMM因为没有显式FREE,所以误报内存泄露了。第二个问题继续求解,因为看了源码中的waitfor,有个判断挂起然后resume的句子,所以希望确认一下。那么当我将一个FreeOnTerminate:= false的tthread手动释放时,是否应该这样:if stop thenbegintthread.Suspend; //这里挂起是为了让线程停下,然后方便程序取一些全局变量//这中间是读取一些全局变量的代码tthread.FreeOnTerminate:=true;tthread.Terminate;tthread.Resume;end;以上代码,我在强行关闭程序时,会发生 thread error拒绝访问 错误, 发生在Suspend这里。我想知道程序在关闭时的执行顺序,在哪一步关闭并释放线程资源的,我在线程中使用了application.Terminated 来判断,会起作用吗?我调试时没跟踪到。 if Assigned(AThread) then begin AThread.Terminate; AThread.WaitFor; FreeAndNil(AThread); end; 不敢用waitfor因为线程里用了indy 的idftp,有可能阻塞,waitfor 会锁死free里就用了waitfor的 一般关闭窗体使用线程free的话,在Create构造函数中就不要使用freeonterminate:=true;线程自动释放了.再使用free,会出现错误 主程序中使用waitfor,有时会造成窗体界面卡死. 判断线程是否退出应该使用if 线程.Terminated then判断吧 那个stop是外部的命令变量了。这时还没给线程结束命令呢。重点是,suspend为什么会导致 thread error 拒绝访问错误。我还没freeonterminate:=true呢,也没让terminate 确认TTHREAD类不适合自释放,会导致程序错误。 delphi 获取存储过程的值 48位RGB如何转换成24位RGB 请教一个导入导出Excel的小问题,就是标题可以选择的那种,跟Sql Server里导出差不多 控制窗体 请问谁有Crystal Reports for delphi6? stringgrid??在线关注?? [超难]COM组件中延时问题 怎样用SQL查询时,把字段名更改? 怎样检测到一个ShowMessage()对话框仍在显示? Sql server中,判断一个字符在一个字符串的位置的函数是什么? 为什么反复创建释放多线程TTHREAD对象会引起内存溢出 indy10中IDFTP的神奇问题
那么当我将一个FreeOnTerminate:= false的tthread手动释放时,是否应该这样:if stop then
begin
tthread.Suspend; //这里挂起是为了让线程停下,然后方便程序取一些全局变量
//这中间是读取一些全局变量的代码
tthread.FreeOnTerminate:=true;
tthread.Terminate;
tthread.Resume;
end;以上代码,我在强行关闭程序时,会发生 thread error拒绝访问 错误, 发生在Suspend这里。我想知道程序在关闭时的执行顺序,在哪一步关闭并释放线程资源的,我在线程中使用了application.Terminated 来判断,会起作用吗?我调试时没跟踪到。
begin
AThread.Terminate;
AThread.WaitFor;
FreeAndNil(AThread);
end;
线程自动释放了.再使用free,会出现错误