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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2013, 20:19   #1
fucil
Форумчанин
 
Регистрация: 24.02.2010
Сообщений: 148
Восклицание CreateThread непонятки с утечкой памяти

Делаю вот так и все ок, поток завершается, ресурсы освобождаются, до запуска 800кб, после запуска потока допустим 860кб, после завершения потока 800кб. Все четко:

Код:
var //глобал
   HandlThread:Cardinal;
   idThread :Cardinal;
   gogo:boolean;

procedure MyProc;
begin
while gogo do begin
  Writeln('thread work');
end;
EndThread(HandlThread); // особое внимание вот тут !
end;

procedure Start;
begin
gogo:=true;
HandlThread:= CreateThread(nil, 0, @MyProc, nil, 0, idThread);
//можно и BeginThread суть не поменяет
end;

procedure Stop;
begin
  gogo:= false;
end;
Но если создать допустим 5 или 20 или 200 потоков неважно то происходит утечка памяти допустим!
до запуска 800кб, после запуска потоков допустим 2860кб, после завершения потоков 1200кб.
Потоки мрут, память снимается но не вся.
Делаю вот так, по идее все должно быть норм, но увы(( В чем подвох ???


Код:
var //глобал
   HandlThread:array [0..500] of Cardinal;
   idThread :Cardinal;
   num:integer;

procedure MyProc;
begin
while gogo do begin
  Writeln('thread work');
end;
//EndThread(0); пишут что помогает но мне не помогло !
end;

procedure Start(znum:integer);
var
i:integer;
begin
num:=znum;
for I := 0 to num do
HandlThread[i] := CreateThread(nil, 0, @MyProc, nil, 0, idThread);
//можно и BeginThread суть не поменяет
end;

procedure Stop;
var
i:integer;
begin
  gogo:= false; //тут можно и закоментить ничего не изменится.
for I := 0 to num do
  EndThread(HandlThread[i]);
end;

Последний раз редактировалось fucil; 15.01.2013 в 20:44.
fucil вне форума Ответить с цитированием
Старый 15.01.2013, 20:22   #2
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

CloseHandle ?
EUGY вне форума Ответить с цитированием
Старый 15.01.2013, 20:38   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

хм, во первых функция потока выглядит так:
Код:
function ThreadFunc(T:Pointer):Integer;stdcall;
во вторых достаточно из нее выйти чтоб поток сам завершился.
далее закрывайте хендлы.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.01.2013, 20:50   #4
fucil
Форумчанин
 
Регистрация: 24.02.2010
Сообщений: 148
Восклицание

Попробовал так результат такой же как и раньше (жрет память)!

Код:
var //глобал
   HandlThread:array [0..500] of Cardinal;
   idThread :Cardinal;
   num:integer;

procedure MyProc(T:Pointer):Integer;stdcall;
begin
while gogo do begin
  Writeln('thread work');
end;
//EndThread(0); пишут что помогает но мне не помогло !
end;

procedure Start(znum:integer);
var
i:integer;
begin
num:=znum;
for I := 0 to num do
HandlThread[i] := BeginThread(nil, 0, @MyProc, nil, 0, idThread); /.сменил на BeginThread все же он корректнее 
end;

procedure Stop;
var
i:integer;
begin
  gogo:= false; 
  sleep(500);
for I := 0 to num do
  CloseHandle(HandlThread[i]);
end;

Последний раз редактировалось fucil; 15.01.2013 в 20:54.
fucil вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с утечкой памяти mr_cipher C# (си шарп) 10 28.08.2012 14:18
boost::thread и CreateThread Sam Gold Общие вопросы C/C++ 3 09.10.2011 18:01
Проблема с утечкой памяти ExPeL Win Api 4 21.10.2010 22:13
самописный assert: проблема с утечкой памяти) sashonk Общие вопросы C/C++ 2 26.04.2010 15:58