大侠小虾一起帮我看看,谢谢代码如下:
Procedure TClientThread.Execute;
Var
    tmpStr: String;
    fileName: String;
    iniFile: TIniFile;
    fileStream: TFileStream;
    client: TIdTCPClient;
    size: Int64;
Begin
    While Not Terminated Do
    Begin
        Sleep(10000);
        client := TIdTCPClient.Create();
        Try
            client.ConnectTimeout := 10000;
            With client Do
            Begin
                iniFile := TIniFile.Create(ExtractFilePath(Application.ExeName) + '\gkean.ini');
                Try
                    Host := iniFile.ReadString('Setup', 'IP', '127.0.0.1');
                    Port := iniFile.ReadInteger('Setup', 'PORT', 6218);
                    ConnectTimeout := 15000;
                    Connect;  //就在这里,如果服务器端没有运行,程序运行到这里就结束了,好像线程死掉了一样
                    logger.println('connected.');
                    ...........省略
                    
                    Except
                    End;
                Finally
                    //FreeAndNil(iniFile);
                    iniFile.Free;
                End;            End;
        Finally
            //FreeAndNil(client);
            client.Free;
        End;
    End;
    { Place thread code here }
End;

解决方案 »

  1.   

     if CBClientActive.Checked = true then
        begin
          for i := 0 to strtoint(Edit_ClientNum.text) - 1 do
            begin
              tcpClient[i] := TIdTCPClient.Create(self);
            end;
          try
            for i := 0 to strtoint(Edit_ClientNum.text) - 1 do
              begin
                if (Edit2.Text<>'') and (Edit3.Text<>'') then
                  begin
                    try
                      tcpClient[i].Host:=Edit2.Text;
                      tcpClient[i].Port:=strtoint(Edit3.text);
                      tcpClient[i].Connect();  
                      GetValue(i);
                      AppendTreeList(RecordList);
                      ProgramDelay(10);
                    except
                    end;
                  end;
              end;
            ClientHandleThread := TClientHandleThread.Create(True);
            ClientHandleThread.FreeOnTerminate:=True;
            ClientHandleThread.Resume;
          except
            on E: Exception do MessageDlg ('Error while connecting:'+#13+E.Message, mtError, [mbOk], 0);
          end;
        end
      else
      begin
        ClientHandleThread.Terminate;
      end;这段代码是我以前写的,你可以参考一下
      

  2.   

    应该没有区别!
    我可以发源码给你(如果你愿意留下email),帮我看看,我delphi一点都不行,就是临时做了这么个东西