Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 TThread.FreeOnTerminate vs ReportMemoryLeaksOnShutdown  [new]
misha mike
Member

Откуда:
Сообщений: 723
Народ, а есть какой-то простой способ избавиться от гонки сабжей? Еще одна волшебная глобальная переменная какая-то?
А то с большой вероятностью отчет об не высвобожденной памяти выводится до того, как отработает сборщик завершенных потоков.
Проблем не доставляет, но при отладке бесит ложными сообщениями об утечках.
13 ноя 20, 15:10    [22231457]     Ответить | Цитировать Сообщить модератору
 Re: TThread.FreeOnTerminate vs ReportMemoryLeaksOnShutdown  [new]
rgreat
Member

Откуда:
Сообщений: 6312
misha mike,

Нет никакой гонки. Просто у тебя потоки не освобождаются до закрытия приложения.

Поставь waitfor у потоков и не мучай себя.

Сообщение было отредактировано: 13 ноя 20, 15:09
13 ноя 20, 15:12    [22231460]     Ответить | Цитировать Сообщить модератору
 Re: TThread.FreeOnTerminate vs ReportMemoryLeaksOnShutdown  [new]
misha mike
Member

Откуда:
Сообщений: 723
rgreat, отпускаю сразу.
Может до них не успевает доходить нужное количество процессорного времени, не знаю, а делать waitfor нечему, потоки анонимные.
13 ноя 20, 18:27    [22231637]     Ответить | Цитировать Сообщить модератору
 Re: TThread.FreeOnTerminate vs ReportMemoryLeaksOnShutdown  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 12319
misha mike
делать waitfor нечему, потоки анонимные.
Самый тупой код, который можно придумать
  AtomicIncrement(GThreadCounter);
  TThread.Queue(
    nil,
    procedure
    begin
      ......
      AtomicDecrement(GThreadCounter);
    end;
  );

procedure TForm1.FormDestroy(Sender: TObject);
begin
  while (GThreadCounter > 0) do
    Sleep(100);
end;
13 ноя 20, 18:38    [22231644]     Ответить | Цитировать Сообщить модератору
 Re: TThread.FreeOnTerminate vs ReportMemoryLeaksOnShutdown  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 26836
misha mike
потоки анонимные

Я стреляю себе в ногу и мне почему-то больно.
13 ноя 20, 22:38    [22231767]     Ответить | Цитировать Сообщить модератору
 Re: TThread.FreeOnTerminate vs ReportMemoryLeaksOnShutdown  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1246
misha mike
rgreat, отпускаю сразу.
Может до них не успевает доходить нужное количество процессорного времени, не знаю, а делать waitfor нечему, потоки анонимные.


При создании анонимного потока запоминайте ссылку на объект потока и не используйте FreeOnTerminate. Удаляйте объекты потоков при выходе из программы. Тогда не будет вышеуказанных проблем. Можно периодически (по таймеру) чистить объекты отработавших анонимных потоков.
13 ноя 20, 23:44    [22231800]     Ответить | Цитировать Сообщить модератору
 Re: TThread.FreeOnTerminate vs ReportMemoryLeaksOnShutdown  [new]
Док
Member

Откуда: Казань
Сообщений: 6900
DmSer
misha mike
rgreat, отпускаю сразу.
Может до них не успевает доходить нужное количество процессорного времени, не знаю, а делать waitfor нечему, потоки анонимные.


При создании анонимного потока запоминайте ссылку на объект потока и не используйте FreeOnTerminate. Удаляйте объекты потоков при выходе из программы. Тогда не будет вышеуказанных проблем. Можно периодически (по таймеру) чистить объекты отработавших анонимных потоков.


+1
возьму идею на заметку
16 ноя 20, 13:25    [22232861]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить