Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
ВнизНужно ли закрывать Handle терминированного процесса ? Найти похожие ветки
← →
Alex_Petr © (2005-02-12 04:58) [0]Здравствуйте !
Делаю так:
procedure WaitRunningProcess(const Sour:TFileName; const TmOut:DWord);
var
ProcID:Int64;
ProcHand:THandle;
List:TStringList;
begin
ProcID:=0;
if not FileExists(Sour) then Exit;
List:=TStringList.Create;
if RunningProcessesList(List,True)then // Здесь получаю список процессов
begin
ProcID:=List.IndexOf(Sour);
if ProcID>-1 then
begin
ProcID:=DWord(List.Objects[ProcID]); // В Objects записаны ID процессов
ProcHand:=OpenProcess(SYNCHRONIZE,False,ProcID);
if ProcHand>0 then
try
WaitForSingleObject(ProcHand,TmOut);
finally
CloseHandle(ProcHand);
// Необходима ли эта строка, если WaitForSingleObject возвращает WAIT_OBJECT_0 ( ошибки не выдает )
// или корректнее писать так: WaitResult:=WaitForSingleObject(ProcHand,TmOut);
// if WaitResult<>WAIT_OBJECT_0 then CloseHandle(ProcHand);
end;
end;
end;
List.Free;
end;
← →
jack128 © (2005-02-12 06:22) [1]Закрывать хендл нужно в любом случае.
← →
Alex_Petr © (2005-02-12 07:03) [2]jack128 © (12.02.05 6:22) [1]
Да, но процесса то уже не существует.
← →
jack128 © (2005-02-12 07:37) [3]объект ядра "процесс" пока не будут закрыты все его хендлы. А то что сам процесс завершился - это дело десятое. Ты все еще можешь использовать ProcHand, например, в функции GetExitCode..
← →
jack128 © (2005-02-12 07:38) [4]jack128 © (12.02.05 7:37) [3]
объект ядра "процесс" будет существовать пока не будут закрыты все его хендлы.
← →
Alex_Petr © (2005-02-12 08:36) [5]jack128 © (12.02.05 7:37) [3]
Т.е., если я не закрою Handle, то я могу пол часа валять дурака,
а потом спросить GetModuleFileNameEx(ProcHand,...
и получить ответ, хотя никакого процесса давно уже нет.
Я тебя правильно понял ?
← →
Alex_Petr © (2005-02-12 08:37) [6]Стало интересно. Сейчас проверю.
← →
Alex_Petr © (2005-02-12 08:49) [7]Проверил: ничего подобного.
Возвращает ошибку: Handle is invalid
← →
jack128 © (2005-02-12 10:05) [8]Хе, ну так если процесс уже выгружен, то откуда ж у него могут взятся загруженные модули?
вот почитай http://delphimaster.net/view/15-1106747384/ где то с поста 40 ого..
← →
Alex_Petr © (2005-02-12 18:05) [9]Спасибо за ссылку: помогло разобраться.
← →
panov © (2005-02-12 19:07) [10]Вопрос не соответствует теме конференции.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.04 c