Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Speicherleck in TIdSNTP?? (https://www.delphipraxis.net/119370-speicherleck-tidsntp.html)

HeikoAdams 25. Aug 2008 14:50


Speicherleck in TIdSNTP??
 
Hallo,
laut FastMM bleiben nach dem Aufruf der folgenden Prozedur 1 TIdThreadSaveInteger und 2 TIdCriticalSection im Speicher übrig:
Delphi-Quellcode:
procedure LoginSpeichern(DataSet: TAdoDataSet; UserId: Integer; Pause: Double;
  PauseVon, PauseBis: TTime; const SyncSysTime: Boolean = False);
var
  Day, Month, Year: Word;
  TimeServer: TIdSNTP;
  Jetzt: TDateTime;
  ServerID: Integer;
  Fehler: Boolean;
begin
  Jetzt := Now;
  Fehler := False;

  Randomize();
  ServerID := Random(High(ServerPool) - 1);

  TimeServer := TIdSNTP.Create(nil);
  with TimeServer do
  begin
    ReceiveTimeout := 1000;
    try
      try
        Host := ServerPool[ServerID];
        Connect;
        //repeat until Connected;
        Jetzt := DateTime;
        if SyncSysTime then
          try
            if not SyncTime then
              MessageBox(0, AtomicTime02, MsgError, MB_ICONWARNING or MB_OK or
                MB_APPLMODAL);
          except
              MessageBox(0, AtomicTime03, MsgError, MB_ICONWARNING or MB_OK or
                MB_APPLMODAL);
          end;
      except
        Fehler := True;
      end;
    finally
      //Disconnect;
      //Free;
      Destroy;
    end;
  end;

  if Fehler then
  begin
    Jetzt := Now;
    MessageBox(0, AtomicTime01, MsgError, MB_ICONWARNING or MB_OK or
      MB_APPLMODAL);
  end;

  Year := 0;
  Month := 0;
  Day := 0;    
  DecodeDate(Jetzt, Year, Month, Day);    

  with DataSet do
  begin
    Close;
    with Parameters do
    begin
      ParamValues['pUser'] := UserID;
      ParamValues['pTag'] := Day;
      ParamValues['pMon'] := Month;
      ParamValues['pJahr'] := Year;
    end;
    Open;

    if (RecordCount = 0) then
    begin
      Append;
      FieldByName('Benutzer').AsInteger := UserID;
      FieldByName('Login').AsDateTime := Jetzt;
      FieldByName('Tag').AsInteger := Day;
      FieldByName('Monat').AsInteger := Month;
      FieldByName('Jahr').AsInteger := Year;
    end
    else
    begin
      First;
      Edit;
      if (FieldByName('Login').AsVariant <> NULL) then
      begin
        FieldByName('Zeit').AsFloat := CalcArbeitszeit(FieldByName('Login').AsDateTime,
          Jetzt, PauseVon, PauseBis, Pause);
      end;
      FieldByName('Logout').AsVariant := null;
    end;
    Post;
    Close;
  end;
end;
Ist das tatsächlich ein Speicherleck oder mache ich "nur" irgendwas falsch??

Bernhard Geyer 25. Aug 2008 14:52

Re: Speicherleck in TIdSNTP??
 
Liest du hier weiter ...

HeikoAdams 25. Aug 2008 14:58

Re: Speicherleck in TIdSNTP??
 
Danke für den Hinweis


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:39 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