Einzelnen Beitrag anzeigen

AlBo55

Registriert seit: 17. Jan 2008
Ort: Lieblingshof
30 Beiträge
 
Delphi XE7 Enterprise
 
#4

Re: Indy IdTCPClient/IdTCPServer CPU Auslastung 100%

  Alt 4. Feb 2010, 12:21
Vielen Dank für die Antwort

wie gesagt ich hab den code für die Anzeige hier ausgehöhlt
Das Original
Client
Delphi-Quellcode:
procedure BoTCPClient.Execute;
begin
  Client:=TIdTCPClient.Create(nil);
  Client.Host:=Host;
  Client.Port:=Port;
  Synchronize(GetHand);
  i:=0;
  while not terminated do
  begin
    if not(Client.Connected) then
    begin
      try
        Client.Connect;
        // Anmeldestring senden
        Synchronize(VerbA);
        Client.IOHandler.Write(Anmeld+#10);
        Synchronize(Anm);
        PostMessage(hwd,SKY_CONNECT,0,1);
        i:=0;
      except
        on E:Exception do
        begin
          Emsg:=E.Message;
          inc(i);
          Synchronize(Fehler);
          PostMessage(hwd,SKY_CONNECT,0,2);
        end;
      end;
    end;
    if Client.Connected then
    begin
      if cmd=1 then
      begin
        {Anmeldestring senden}
        Client.IOHandler.Write(Anmeld+#10);
        Synchronize(Anm);
        cmd:=0;
      end;
      if cmd=2 then
      begin
        {Bulk-Kommando senden}
        Client.IOHandler.Write('BULK'+DateTimeToStr(Date)+' 00:00:00-'+
         DateTimeToStr(Date+1)+' 23:59:59'+#10);
        Synchronize(Bu);
        cmd:=0;
      end;
      if cmd=3 then
      begin
        {beliebiges Kommando senden}
        Client.IOHandler.Write(command+#10);
        Synchronize(Bu);
        cmd:=0;
      end;
      while not Client.IOHandler.InputBufferIsEmpty do
      begin
        {es gibt noch was zu lesen}
        text:=Client.IOHandler.ReadLn;
        synchronize(UpdateMemo);
      end;
    end;
  end;
  if Client.Connected then
  begin
    // Thread terminated
    Client.Disconnect;
  end;
  Synchronize(VerbE);
  PostMessage(hwd,SKY_CONNECT,0,0);
end;
Server
Delphi-Quellcode:
procedure TForm1.TCPServerExecute(AContext: TIdContext);
var
  I: Integer;
  st:integer;
begin
  {Server Thread ausführen}
  text:=AContext.Connection.IOHandler.ReadLn;
  REdit.Lines.Add(DateTimeToStr(now)+': Nachricht: '
   +text);
  while lauf do
  begin
    case send of
     1: begin
          // Befehl senden
          AContext.Connection.IOHandler.Writeln(Edit2.Text);
          send:=0;
        end;
     2: begin
          // einzelnen Datensatz senden
          st:=-1;
          for I := 0 to sl.Count - 1 do
          begin
            if DFSuche(sl[i],'DatabaseId')=ListBox1.Items[ListBox1.ItemIndex] then
            begin
              st:=i;
              break;
            end;
          end;
          if st<>-1 then
           AContext.Connection.IOHandler.Writeln(sl[st]+#18);
          send:=0;
        end;
     3: begin
          // alle Datensätze senden
          for I := 0 to sl.Count - 1 do
          begin
            AContext.Connection.IOHandler.Writeln(sl[i]+#18);
          end;
          send:=0;
        end;
    end;
    if Copy(text,1,4)='BULKthen
    begin
      for I := 0 to sl.Count - 1 do
      begin
        AContext.Connection.IOHandler.Writeln(sl[i]+#18);
      end;
    end;
  end;
end;
die Auslastung verändert sich dabei leider überhaupt nicht


Albrecht
  Mit Zitat antworten Zitat