兄弟们,帮帮我,这个问题解决不了,五一就不能放假了。!!!!!!!! 1.我没有使用第三方控件。2.刚才我查了一下。发现我的线程所有的资源都被释放掉了,但是线程并没有停下来。我用的是TThread类。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 cg1120(代码最优化) 是这样的。我先定义了一个基于MSComm类的类TComCtrl,在我的线程类中,创建了一个TComCtrl,当然,我只用了这么一个东西。接下来,我创建了2个线程。线程是从程序开始运行时创建的,等到程序退出的时候才停止。可是,我停止的时候,线程内部的资源(创建的TComCtrl)已经被释放掉了,可是线程还是在转。(我用API函数去停止线程)我还用了一种方法,TThread类,不是在Execute方法执行结束后就自动结束线程了吗?我的Execute内部程序是一个死循环,给了一个退出条件,当满足条件时退出循环,这样,循环就停下来了。但是这样停止线程后,还是不行,程序退出的时候还是出错。问题肯定就出在这里。因为,如果我不创建线程,那么程序在退出的时候是不出错的。 把TComCtrl创建在线程类外面看看最好贴代码看看 可能某类里面未释放一些资源。比如:destrcutor destroy;begin Image.free; FOnt.free; ...end; 在退出系统的时候,首先调用CLOSE;然后在FORMQUERYCLOSE过程中写上ACTION:=CAFREE;这样就是完全释放了所有内存中的资源了。 在 form 的 ondestroy里,把你的第三方控件 free掉 你把delphi里的菜单Project的options里的Linker里的Max stack size放大点. 我的线程的代码:constructor TThreadCtrlCom.Create(PortNumber : integer;InSend : boolean);beign inherited(true); try MySysCom := TDectCom.Create(PortNumber,IsSend); IsEnd := false; f_MyComNumber := PortNumber; FreeOnTerminate := true; except IsEnd := true; end;end;destructor TThreatCtrlCom.Destroy;beginend;procedure TThreatCtrlCom.Execute;begin while true do begin Application.ProcessMessages; sleep(5); if IsEnd then begin MySysCom.Destroy; GetExitCodeThread(Handle,ExitThreadCode); ExitThread(ExitThreadCode); end; { 线程执行过程 } end;end; 其中TDectCom是我自己定义的基于MsComm的类。 其中TDectCom是我自己定义的基于MsComm的类。 遇到大麻烦了,救救我啊大家 一个简单问题,请大侠们进来帮帮忙(急急!!!) MDI窗体的简单问题,解决马上给分! 高分求救关于保存数据到数据库中的问题! 请问创建控件数组吗 关于开发客户端和服务器模式的问题 我想不通,我恨! 各位兄弟,RichEdit问题,为什么? 多层应用系统中经常出现“不支持此接口”异常。原因何在????? 我不信这个问题就没有人不会 如何追查Delphi中的内存泄漏问题?有点急...... 怎样让delphi 调用chm帮助文件
是这样的。我先定义了一个基于MSComm类的类TComCtrl,在我的线程类中,创建了一个TComCtrl,当然,我只用了这么一个东西。接下来,我创建了2个线程。线程是从程序开始运行时创建的,等到程序退出的时候才停止。可是,我停止的时候,线程内部的资源(创建的TComCtrl)已经被释放掉了,可是线程还是在转。(我用API函数去停止线程)我还用了一种方法,TThread类,不是在Execute方法执行结束后就自动结束线程了吗?我的Execute内部程序是一个死循环,给了一个退出条件,当满足条件时退出循环,这样,循环就停下来了。但是这样停止线程后,还是不行,程序退出的时候还是出错。问题肯定就出在这里。因为,如果我不创建线程,那么程序在退出的时候是不出错的。
比如:
destrcutor destroy;
begin
Image.free;
FOnt.free;
...
end;
ACTION:=CAFREE;这样就是完全释放了所有内存中的资源了。
把你的第三方控件 free掉
constructor TThreadCtrlCom.Create(PortNumber : integer;InSend : boolean);
beign
inherited(true);
try
MySysCom := TDectCom.Create(PortNumber,IsSend);
IsEnd := false;
f_MyComNumber := PortNumber;
FreeOnTerminate := true;
except
IsEnd := true;
end;
end;
destructor TThreatCtrlCom.Destroy;
begin
end;procedure TThreatCtrlCom.Execute;
begin
while true do
begin
Application.ProcessMessages;
sleep(5); if IsEnd then
begin
MySysCom.Destroy;
GetExitCodeThread(Handle,ExitThreadCode);
ExitThread(ExitThreadCode);
end; { 线程执行过程 }
end;
end;