У меня есть следующий сервис, написанный на Delphi 2007, который, как мне кажется, не выпускает дескриптор потока. Функции CurrentMemoryUsage и GetOpenHandles являются функциями для возврата используемой памяти и номера дескриптора, используемого приложением. Таймер срабатывает каждую секунду, создавая нить, которая немедленно уничтожается. И я вижу в своем журнале Количество открытых дескрипторов с шагом в один раз. Это очень простой вопрос.
TMyThread = class(TThread)
private
protected
procedure Execute; override;
public
constructor Create(CreateSuspended: Boolean);
destructor Destroy; override;
end;
procedure TMyService.MyTimerTimer(Sender: TObject);
var
MyThread : TMyThread;
begin
MyThread := TMyThread.Create(True);
MyThread.OnTerminate := ThreadTerminated;
MyThread.FreeOnTerminate := True;
MyThread.Resume;
end;
procedure TMyThread.Execute;
begin
FreeOnTerminate := True;
end;
destructor TMyThread.Destroy;
begin
appendtolog((FormatFloat('Memory used: ,.# K', CurrentMemoryUsage / 1024))+',Number of Handles:'+inttostr(GetOpenHandles)) ;
end;
constructor TMyThread.Create(CreateSuspended: Boolean);
begin
inherited Create(CreateSuspended);
end;
procedure TMyService.ThreadTerminated(Sender: TObject);
begin
appendtolog('thread terminiated');
end;