Avatar billede morten_s Nybegynder
02. juni 2002 - 15:41 Der er 2 kommentarer og
1 løsning

Memory Leak ???

Jeg har en tråd som ser ud på følgende måde:

unit tNWPoll;

interface

uses
  Classes, Dialogs, Controls, SysUtils, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient;

type
  TNWPollController = class (TThread)
  private

  protected
    procedure Execute; override;
  public
    ClientSocket : TIdTCPClient;
    IPNo : String;
    Port : Integer;
    Constructor Create;
    Destructor Destroy; override;
  end;

implementation

constructor TNWPollController.Create;
begin
  inherited Create(true);
  FreeOnTerminate := True;
end;

destructor TNWPollController.Destroy;
begin
  inherited;
end;

procedure TNWPollController.execute;
begin
  inherited;
  ClientSocket := TIdTCPClient.Create(nil);
  ClientSocket.Host := IPNo;
  ClientSocket.Port := Port;
  try
    ClientSocket.Connect;
  except
    ClientSocket.Free;
    Exit;
  end;
  sleep(100);
  ClientSocket.Disconnect;
  ClientSocket.Free;
end;

end.


Hvis jeg starter tråden f.eks 1. gang i sekundet på en timer kan jeg se at hukommelsesforbruget stiger lige så langsomt i windows jobliste, særligt hvis jeg forsøger at connecte til en IPadr/Port som er optaget.

Hvorfor bliver der ikke freet ordentligt når freeOnTerminate er sat til true ?
Avatar billede doc404 Novice
02. juni 2002 - 21:59 #1
Tror du ikke nærmere leaken ligger i TIdTCPClient?
Avatar billede zimp Nybegynder
03. juni 2002 - 00:08 #2
Hvis du kun har 1 variabel til din thread klasse, og threaden ikke er kørt færdig på 1 sekund (fx. med IP/port der ikke kan connectes til, eller bare er langsom), så vil du overskrive denne inden den er free'd. Jeg kan ikke på stående fod sige hvad der så sker, når det er en TThread, men det er meget sandsynligt det vil give en leak.

Du creater suspended, men jeg går ud fra at du Resumer når du har created ;)
Avatar billede morten_s Nybegynder
03. juni 2002 - 15:57 #3
try
  ClientSocket.Connect;
except
  on E:Exception do
  begin
    ClientSocket.Free;
    Exit;
  end;
end;

Dette ser ud til at gøre en forskel ?
on E:Exception do
      begin
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester