Einzelnen Beitrag anzeigen

Vjay

Registriert seit: 2. Dez 2003
Ort: Berlin/Eschede
481 Beiträge
 
Delphi 7 Professional
 
#1

Indy TCP Server und Threads

  Alt 14. Apr 2005, 12:20
Hallo,

ich habe irgendwo in einem Programmteil von mir ein Memoryleak und ich finde es einfach nicht. Dazu habe ich mal eine Frage und zwar verwende ich einen TIdTCPServer um bestimmt Prozesse zu überwachen.

Das ganze läuft so ab, zuerst wird ein Request gesendet:

Delphi-Quellcode:
procedure TMainForm.CommandServerinitPDSWatchCommand(ASender: TIdCommand);
begin
 syncAddLog('initpdswatch von ' + ASender.Thread.Connection.Socket.Binding.PeerIP + ' empfangen');
 if ASender.Params.Count > 1 then
  PDS.addWatcher(ASender.Thread, strToIntDef(ASender.Params[0], pds_WatchAll), boolean(strToIntDef(ASender.Params[1], 0)));
end;
Danach werden die ASender.Threads korrekt synchronisiert an einen Thread übergeben, welcher parallel zur Anwendung läuft, Daten sammelt und an die connecteten Clients übergibt.

Das ganze sieht ungefähr so aus:

Delphi-Quellcode:
   // TOSend(Pointerliste) enthält nun alle connections und Daten die versendet werden müssen
   for wdh:= ToSend.count-1 downto 0 do
   begin
    SI:= ToSend[wdh];
    if not terminated then
    begin
     try
      SI.PeerThread.Connection.OpenWriteBuffer;
      SI.Daten.sendOverIndyPeerThread( Si.PeerThread, Si.komprimiert, SI.abZeit);
      SI.PeerThread.Connection.CloseWriteBuffer;
     except
      syncAddLog('watchThread Exception 4');
      try
       SI.PeerThread.Connection.CancelWriteBuffer;
      except
       syncAddLog('watchThread Exception 4.5');
      end;
     end;
    end;
    dispose( SI);
   end;
Nun wie gesagt wird das Programm immer grösser und ich suche bereits seit 2 Wochen nach dem Leak, der Code ist ansonsten 100%ig korrekt und irgendwelche MemCheck - Hilfsunits haben ebenfalls nichts gefunden. Das Einzige was mir noch einfällt ist, dass es irgendwie ein Problem mit dem Indyserver in Bezug auf synchronisierung(?) geben könnte.

Ansonsten verwende ich noch exzessiv TBitmap in dem Thread, könnte es sein dass dieses ein Memoryleak hat? Kann mir da jemand was zu sagen, darf man so auf die PeerConnections zugreifen?

Danke,
Volker
Wer später bremst ist eher tot.
  Mit Zitat antworten Zitat