Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TThread.FreeOnTerminate vs ReportMemoryLeaksOnShutdown / 7 сообщений из 7, страница 1 из 1
13.11.2020, 15:10
    #40017951
misha mike
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TThread.FreeOnTerminate vs ReportMemoryLeaksOnShutdown
Народ, а есть какой-то простой способ избавиться от гонки сабжей? Еще одна волшебная глобальная переменная какая-то?
А то с большой вероятностью отчет об не высвобожденной памяти выводится до того, как отработает сборщик завершенных потоков.
Проблем не доставляет, но при отладке бесит ложными сообщениями об утечках.
...
Рейтинг: 0 / 0
13.11.2020, 15:12
    #40017953
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TThread.FreeOnTerminate vs ReportMemoryLeaksOnShutdown
misha mike,

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

Поставь waitfor у потоков и не мучай себя.
...
Рейтинг: 0 / 0
13.11.2020, 18:27
    #40018085
misha mike
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TThread.FreeOnTerminate vs ReportMemoryLeaksOnShutdown
rgreat, отпускаю сразу.
Может до них не успевает доходить нужное количество процессорного времени, не знаю, а делать waitfor нечему, потоки анонимные.
...
Рейтинг: 0 / 0
13.11.2020, 18:38
    #40018089
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TThread.FreeOnTerminate vs ReportMemoryLeaksOnShutdown
misha mike
делать waitfor нечему, потоки анонимные.
Самый тупой код, который можно придумать
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  AtomicIncrement(GThreadCounter);
  TThread.Queue(
    nil,
    procedure
    begin
      ......
      AtomicDecrement(GThreadCounter);
    end;
  );

procedure TForm1.FormDestroy(Sender: TObject);
begin
  while (GThreadCounter > 0) do
    Sleep(100);
end;
...
Рейтинг: 0 / 0
13.11.2020, 22:38
    #40018140
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TThread.FreeOnTerminate vs ReportMemoryLeaksOnShutdown
misha mike
потоки анонимные

Я стреляю себе в ногу и мне почему-то больно.
...
Рейтинг: 0 / 0
13.11.2020, 23:44
    #40018163
DmSer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TThread.FreeOnTerminate vs ReportMemoryLeaksOnShutdown
misha mike
rgreat, отпускаю сразу.
Может до них не успевает доходить нужное количество процессорного времени, не знаю, а делать waitfor нечему, потоки анонимные.


При создании анонимного потока запоминайте ссылку на объект потока и не используйте FreeOnTerminate. Удаляйте объекты потоков при выходе из программы. Тогда не будет вышеуказанных проблем. Можно периодически (по таймеру) чистить объекты отработавших анонимных потоков.
...
Рейтинг: 0 / 0
16.11.2020, 13:25
    #40018800
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TThread.FreeOnTerminate vs ReportMemoryLeaksOnShutdown
DmSer
misha mike
rgreat, отпускаю сразу.
Может до них не успевает доходить нужное количество процессорного времени, не знаю, а делать waitfor нечему, потоки анонимные.


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


+1
возьму идею на заметку
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TThread.FreeOnTerminate vs ReportMemoryLeaksOnShutdown / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]