Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2016, 21:36   #1
stlcrash
Форумчанин
 
Регистрация: 04.07.2010
Сообщений: 131
По умолчанию Поток полностью занимет всю оперативную память.

Не могу никак разобраться. Сам поток работает, но постепенно забивает всю память. Вроде все что создаю в потоке, освобождаю. Поток вызываю из основной формы так:
Код:
procedure TForm1.StartPotockClick(Sender: TObject);
begin
  MonDirThread:=TMonDirThread.Create(False);
  MonDirThread.Priority:=tpNormal;
  MonDirThread.FreeOnTerminate:=true;
end;
Код юнита потока в сообщение не помещается. Ломаю голову уже 2 сутки, ничего не выходит
Помогите пожалуйста решить данную проблему.
Вложения
Тип файла: zip Desktop.zip (374.5 Кб, 13 просмотров)
stlcrash вне форума Ответить с цитированием
Старый 13.05.2016, 06:00   #2
stlcrash
Форумчанин
 
Регистрация: 04.07.2010
Сообщений: 131
По умолчанию

Подключил к проекту FastMM.
пишет что не освобождаю битмап. НО я его освобождаю после каждого вызова tBitmap.create;
Пробовал менять
Код:
HelloChekerBMP2.FreeImage;
HelloChekerBMP2.Free;
HelloChekerBMP2.Destroy;

HelloChekerBMP1.FreeImage;
HelloChekerBMP1.Free;
HelloChekerBMP1.Destroy;
Результат ТОТ же. все равно утечка происходит в потоке. Пробовал даже комбинировать и сразу использовать .Free;и .FreeImage; Безрузальтатно.

Код:
--------------------------------2016/5/13 9:53:11--------------------------------
Блок памяти был выделен и не освобожден. Размер: 68

This block was allocated by thread 0xDA8, and the stack trace (return addresses) at the time was:
406C5E 
407BFF 
40840A 
5087F6 [Unknown function at TMethodImplementationIntercept]
76A618 [Unknown function at TMethodImplementationIntercept]
76A852 [Unknown function at TMethodImplementationIntercept]
4C3390 [Unknown function at TMethodImplementationIntercept]
409A02 
76D3336A [BaseThreadInitThunk]
77AC9882 [Unknown function at RtlInitializeExceptionChain]
77AC9855 [Unknown function at RtlInitializeExceptionChain]

Блок в настоящее время используется для объекта класса: TBitmap

Выделенный номер стал: 117564

Текущий дамп памяти из 256 байт начиная с адреса 7EC02E60:
D8 F7 4F 00 00 00 00 00 70 E7 48 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 54 DF 4F 00 20 AB C0 7E 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 00 00 00 00
00 00 00 00 51 BA A7 26 00 00 00 00 51 30 C0 7E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
19 D0 01 00 5E 6C 40 00 FF 7B 40 00 0A 84 40 00 F6 87 50 00 A7 88 76 00 68 73 70 00 BF 37 66 00
2D 8B 76 00 47 1C 70 00 9F 90 76 00 37 92 76 00 0C 11 00 00 0C 11 00 00 7A 6C 40 00 1D 7C 40 00
55 84 40 00 90 88 50 00 9F 7D 40 00 D5 10 43 00 F5 8B 76 00 9F 90 76 00 37 92 76 00 EC 8D 76 00
56 0C 48 75 44 00 00 00 D8 F7 4F 00 6F D8 FC FB 94 C2 79 00 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
Ш  ч  O  .  .  .  .  .  p  з  H  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
.  .  .  .  T  Я  O  .     «  А  ~  .  .  .  .  .  .  .  .  .  .  .     .  .  .  .  .  .  .  .
.  .  .  .  Q  є  §  &  .  .  .  .  Q  0  А  ~  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
.  Р  .  .  ^  l  @  .  я  {  @  .  .  „  @  .  ц  ‡  P  .  §  €  v  .  h  s  p  .  ї  7  f  .
-  ‹  v  .  G  .  p  .  џ  ђ  v  .  7  ’  v  .  .  .  .  .  .  .  .  .  z  l  @  .  .  |  @  .
U  „  @  .  ђ  €  P  .  џ  }  @  .  Х  .  C  .  х  ‹  v  .  џ  ђ  v  .  7  ’  v  .  м  Ќ  v  .
V  .  H  u  D  .  .  .  Ш  ч  O  .  o  Ш  ь  ы  ”  В  y  .  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ
Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ  Ђ
stlcrash вне форума Ответить с цитированием
Старый 13.05.2016, 06:15   #3
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Код:
  HelloChekerBMP1.free; HelloChekerBMP2.free;
  HelloChekerBMP1:=TBitmap.Create; HelloChekerBMP2:=TBitmap.Create; // лишняя строчка
end;

procedure TMonDirThread.Execute;
begin
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 13.05.2016, 07:51   #4
stlcrash
Форумчанин
 
Регистрация: 04.07.2010
Сообщений: 131
По умолчанию

Удалил строку, не помогло. память все равно наполняется непонятно чем.
Если при остановке потока не освобождается. Может есть какая нить процедура, чтоб остановить поток и очистить все ресурсы, которые он занимал? И потом его снова перезапускать

PS прикрепил исходники главной формы.
Вложения
Тип файла: zip Поток ГЛЮК.zip (1.36 Мб, 13 просмотров)
stlcrash вне форума Ответить с цитированием
Старый 14.05.2016, 09:27   #5
stlcrash
Форумчанин
 
Регистрация: 04.07.2010
Сообщений: 131
По умолчанию

Проблема все еще актуальна. Прошелся отладчиком уже не один десяток раз, все равно не понимаю чем поток заполняет память.
stlcrash вне форума Ответить с цитированием
Старый 14.05.2016, 09:54   #6
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
НО я его освобождаю после каждого вызова tBitmap.create;
Это не очистка, а создание нового потока. Очистка - tBitmap.clear();
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 14.05.2016, 10:09   #7
stlcrash
Форумчанин
 
Регистрация: 04.07.2010
Сообщений: 131
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Это не очистка, а создание нового потока. Очистка - tBitmap.clear();
tBitmap.clear(); ругается, нет такого метода пишет.
tBitmap.free; есть, но он не помогает
stlcrash вне форума Ответить с цитированием
Старый 16.05.2016, 06:51   #8
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию Вот не лень столько повторяющегося кода кодить?

Вот не лень столько повторяющегося кода кодить?

мой пример с небольшими оптимизациями...

дан задел на обработку параметров в цикле
Вложения
Тип файла: zip Поток ГЛЮК.zip (4.4 Кб, 10 просмотров)
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 16.05.2016 в 06:54.
Slym вне форума Ответить с цитированием
Старый 16.05.2016, 08:50   #9
stlcrash
Форумчанин
 
Регистрация: 04.07.2010
Сообщений: 131
По умолчанию

Огромное спасибо за пример. Действительно чувствуется разница в уровне программирования

Однако в коде ошибка 1 в одном месте pf24bit в другом pf8bit ругается.
2) как память загружалась непонятно чем, так и загружается дальше.
(Для теста убираю с кода паузу.
Код:
procedure TMonDirThread.Execute;
begin
  while not Terminated do
  begin
    checkall;
    inc(n);
    // seep(100);
  end;
end;
stlcrash вне форума Ответить с цитированием
Старый 16.05.2016, 11:43   #10
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Цитата:
Сообщение от stlcrash Посмотреть сообщение
Однако в коде ошибка 1 в одном месте pf24bit в другом pf8bit ругается.
2) как память загружалась непонятно чем, так и загружается дальше.
1. Не проверял pf8bit... Точно ошибка... с чего бы? ладно... вернул 24 битный код
2. на этом проекте у меня не растет память... может ты в другой проект вставляешь?

кстати не вредно будет проверять
Код:
function CompareIMG(bmp1, bmp2: TBitMap): boolean;
var
  i,y, x, yy, xx, err: integer;
  IMG1,IMG2: TIMGData;
begin
    assert(bmp1.Height>=bmp2.Height);
  assert(bmp1.Width>=bmp2.Width);
т.к. 1 картинка должна быть больше либо равна искомому семплу
Вложения
Тип файла: zip Поток ГЛЮК.zip (36.5 Кб, 7 просмотров)
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 16.05.2016 в 11:53.
Slym вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос про оперативную память Lmt32 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 16.12.2015 21:32
Отображение файла в оперативную память rostik123 Win Api 1 06.11.2012 04:59
Отображение файла в оперативную память rostik123 Общие вопросы C/C++ 3 29.10.2012 20:02
Картинку в оперативную память MORPEH Мультимедиа в Delphi 1 12.03.2012 01:35
Как чистить оперативную память??? Altera Операционные системы общие вопросы 10 16.05.2008 14:52