Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с протоками


Страницы:   1 2

EgorovAlex ©   (2007-11-29 11:58:00) 

При работа с потоками очень часто можно видеть такие примеры:

procedure Test;
begin
 CreateThread(...);
end;


Но здесь налицо утечка ресурсов - хендлов созданных потоков.
Сейчас я делаю так:


procedure Test;
var
 hThread: Cardinal;
begin
 hThread := CreateThread(...);
 if (hThread > 0) then
   CloseHandle(hThread);
end;


Теперь утечки нет, и всё нормально работает, но корректно ли закрывать хендл потока до его завершения? Если нет, тот как лучше делать?


EgorovAlex   (2007-11-29 12:12:00) [21]

to tesseract:

очень часто есть потоки, время жизни которых значительно меньше времени жизни приложения, и они создаются очень часто. Если это будет в сервисе, когда компьютер месяцами не выключается, до утечка хендлов "положит" сервер.

to guav:
THandle=LongWord(=Cardinal)
а кардинал не может быть отрицательным


tesseract   (2007-11-29 12:05:00) [22]

А смысл такой процедуры ?  

Для того чтобы понять работает поток или нет в него передаеться Event  или их массив. При выходе потокам посылаеться соббщение "выключайся" и ждеться срабатывание WaitForMultipleObjects. Пример есть в справке delphi и MSDN.


guav   (2007-11-29 12:01:00) [23]

Закрывать действительно надо.
Закрывать до завершения потока корректно.
Проверять лучше hThread <> 0, а хендл объявлять как THandle.

Лучше использовать BeginThread вместо CreateThread чтобы неявно выставлять IsMultiThread в True


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо