1.我没有使用第三方控件。
2.刚才我查了一下。发现我的线程所有的资源都被释放掉了,但是线程并没有停下来。我用的是TThread类。。

解决方案 »

  1.   

    cg1120(代码最优化) 
    是这样的。我先定义了一个基于MSComm类的类TComCtrl,在我的线程类中,创建了一个TComCtrl,当然,我只用了这么一个东西。接下来,我创建了2个线程。线程是从程序开始运行时创建的,等到程序退出的时候才停止。可是,我停止的时候,线程内部的资源(创建的TComCtrl)已经被释放掉了,可是线程还是在转。(我用API函数去停止线程)我还用了一种方法,TThread类,不是在Execute方法执行结束后就自动结束线程了吗?我的Execute内部程序是一个死循环,给了一个退出条件,当满足条件时退出循环,这样,循环就停下来了。但是这样停止线程后,还是不行,程序退出的时候还是出错。问题肯定就出在这里。因为,如果我不创建线程,那么程序在退出的时候是不出错的。
      

  2.   

    把TComCtrl创建在线程类外面看看最好贴代码看看
      

  3.   

    可能某类里面未释放一些资源。
    比如:
    destrcutor destroy;
    begin
      Image.free;
      FOnt.free;
      ...
    end;
      

  4.   

    在退出系统的时候,首先调用CLOSE;然后在FORMQUERYCLOSE过程中写上
    ACTION:=CAFREE;这样就是完全释放了所有内存中的资源了。
      

  5.   

    在 form 的 ondestroy里,
    把你的第三方控件 free掉
      

  6.   

    你把delphi里的菜单Project的options里的Linker里的Max stack size放大点.
      

  7.   

    我的线程的代码:
    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;
      

  8.   

    其中TDectCom是我自己定义的基于MsComm的类。
      

  9.   

    其中TDectCom是我自己定义的基于MsComm的类。