Einzelnen Beitrag anzeigen

BenTech

Registriert seit: 16. Jun 2003
Ort: Dortmund
60 Beiträge
 
Turbo Delphi für Win32
 
#1

Kann das Speicherleck nicht finden...

  Alt 22. Dez 2005, 20:28
Hallo,
ich habe ein Programm geschrieben, das IPs anpingt. Für jeden Ping wird ein Thread erstellt. Ich stelle jedoch fest, dass bei jeder Threaderstellung und Terminierung 16 kByte verloren gehen.
Ich kann jedoch nicht nachvollziehen, wo das Speicherleck ist.

Hier der Aufruf des Threads...
Delphi-Quellcode:
IpWatchList[nowIPIndex].IPThread := TMyThreads.Create(true);
IpWatchList[nowIPIndex].IPThread.InetAddress := png_IP;
IpWatchList[nowIPIndex].IPThread.TimeOut := settings.TimeOut;
IpWatchList[nowIPIndex].IPThread.Index := nowIPIndex;
IpWatchList[nowIPIndex].IPThread.Resume;
So wird der Thread dann geschlossen...
Delphi-Quellcode:
procedure TForm1.UpdateIPView(Online : Boolean; Index : Integer);
begin
  //IpWatchList[Index].IPThread.FreeOnTerminate := true;
  IpWatchList[Index].IPThread.Terminate;
  if Online then
  begin
   //...
  end
  else
  begin
   //...
  end;
end;
Nach Terminate wird auch Speicher freigegeben. Jedoch weniger als zuvor reserviert wurde.

Im Thread geschieht folgendes...
Delphi-Quellcode:
procedure TMyThreads.Execute;
begin
  Online := Ping(InetAddress,TimeOut);
  UpdateMain;
end;

function TMyThreads.Ping(IPAddress : string; IPTimeOut : Integer) : boolean;
var
 Handle : THandle;
 InAddr : IPAddr;
 DW : DWORD;
 rep : array[1..128] of byte;
begin
  Result := false;
  Handle := IcmpCreateFile;
  if Handle = INVALID_HANDLE_VALUE then
   Exit;
  TranslateStringToTInAddr(InetAddress, InAddr);
  DW := IcmpSendEcho(Handle, InAddr, nil, 0, nil, @rep, 128, TimeOut);
  Result := (DW <> 0);
  IcmpCloseHandle(Handle);
end;

procedure TMyThreads.UpdateMain;
begin
  Form1.UpdateIPView(Online,Index);
end;
Zum Pingen benutze ich die Unit "raw_ping".
Vielen Dank schonmal für eure Hilfe .
Angehängte Dateien
Dateityp: pas raw_ping_125.pas (2,7 KB, 11x aufgerufen)
  Mit Zitat antworten Zitat