Registriert seit: 12. Jul 2004
Ort: Oberfranken
661 Beiträge
FreePascal / Lazarus
|
Speicherleck in TIdSNTP??
25. Aug 2008, 15:50
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??
Jeder kann ein Held werden und Leben retten!
Einfach beim NKR oder der DKMS als Stammzellenspender registrieren! Also: worauf wartest Du noch?
|
|
Zitat
|