AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Kann das Speicherleck nicht finden...
Thema durchsuchen
Ansicht
Themen-Optionen

Kann das Speicherleck nicht finden...

Ein Thema von BenTech · begonnen am 22. Dez 2005 · letzter Beitrag vom 30. Dez 2005
 
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, 19: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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz