Как правильно закрыть idHTTPServer, чтобы избежать утечек памяти потоков запросов? - PullRequest
0 голосов
/ 04 апреля 2019

idHTTPServer создает поток для каждого запроса. Иногда мои потоки работают довольно долго, поэтому, когда я закрываю сервер, он протекает с неожиданными блоками памяти. Иногда все работает без утечек памяти, это зависит от момента закрытия приложения. Чтобы избежать этого, я пытаюсь сделать 2 следующих шага. 1. Server.Active: = false или может быть в автономном режиме. 2. Завершить все потоки запросов // не знаю как это сделать ((

Есть ли способ завершить рабочие потоки, прежде чем я закрою приложение?

Я понял такой подход к долго работающим потокам, которые являются моим собственным классом потоков, подобным этому

procedure TMain.FormClose(Sender: TObject; var Action: TCloseAction);
var
  i: integer;
begin
  Stop();

  with LongTaskThreads.LockList() do
  try
    for i := 0 to Count - 1 do
    begin
      TLongTaskThread(Items[i]).FreeOnTerminate := false; // in other case they will be destroyed automatically
      TLongTaskThread(Items[i]).Free();
    end;
  finally
    LongTaskThreads.UnlockList();
  end;
end;

Есть ли подобный подход для запроса потоков idHTTPServer?

С уважением, Стэн

...