![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с протоками
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