Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.27;
Скачать: CL | DM;

Вниз

Нужно ли закрывать 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.05 c
3-1106671003
chistyakov
2005-01-25 19:36
2005.02.27
Альтернативный DataSource


14-1107779407
Sandman25
2005-02-07 15:30
2005.02.27
Исключенное третье


6-1103017032
Ivolg
2004-12-14 12:37
2005.02.27
Прекачка!


6-1103490357
JaVa73
2004-12-20 00:05
2005.02.27
Оранизация web-форумов


1-1108385585
ST
2005-02-14 15:53
2005.02.27
Сервисы