我用TIDClient控件做了一个客户端的程序,我为他创建了一个线程,在线程的execute里
我要收到一个串就发送一个固定的内容,另外,我还会同时对收到的串做处理,运行到页没错,可是在运行间关闭的时候,总是提示:发生软件异常。
请问我该如何纠正!源码如下:
//循环接收信息
Procedure TClientThread.Execute;
begin
  while not ClientThread.Terminated do
   begin
     if not Form1.IdTCPClient.Connected then
        Terminate
     else
        try
          stInform:=Form1.IdTCPClient.ReadLn;
          If stInform<>'0|' then
         begin
            synchronize(DoIt);
         end;
           try
            Form1.IdTCPClient.WriteLn('Update|');
           except
             on E:Exception do MessageDlg('Error :'+#13+E.Message,
             mtError,[mbOK],0);
           end;
         except
          on E:Exception do MessageDlg('Error :'+#13+E.Message,
             mtError,[mbOK],0);
         end;
   end;
end;在窗体关闭的时候我改做那些处理呢?

解决方案 »

  1.   

    在窗体关闭的事件里试着释放线程所站的内存空间
    try
      YourThread.Suspend;
      YourThread.Destory;
    except
    end;
    另外你在线程里面声明的对象创建的时候它的Owner时最好用Self
    即TYourObject.Create(Self)创建
      

  2.   

    是地址出错异常吗?
    在窗体关闭中试试
    ClientThread.Terminated
      

  3.   

    soundbug(兼职乞丐): 安你的方法,现在无法关闭,提示:‘线程错误!,句柄无效‘
      

  4.   

    我的线程声明:
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      IdTCPClient.Host:='192.168.0.20';
      IdTCPClient.Port:=6010;  try
        IdTCPClient.Connect(1000);
        ClientThread:=TClientThread.Create(true);
        ClientThread.FreeOnTerminate:=True;
        ClientThread.Resume;  except
        on E:Exception do MessageDlg('Error while connecting:'+#13+E.Message,
            mtError,[mbOK],0);
      end;
     if IdTCPClient.Connected then
          IdTCPClient.WriteLn('Login|Client|guest|');
         label1.Caption:='已登陆网站  ';
    end;