Утечка ручки наблюдается, когда процесс выполняется в сочетании с другим процессом - PullRequest
1 голос
/ 03 февраля 2011

Один из моих исполняемых файлов открывает около 330 дескрипторов, когда он запускается один.Где, когда он запускается в сочетании с другим конкретным процессом, он пропускает много дескрипторов.

Я использовал утилиту 'handle' от sysinternals, чтобы проверить, какие все дескрипторы открыты в обоих случаях.Когда этот процесс запускается в сочетании с другим конкретным процессом, он имеет следующую дополнительную запись дескриптора.

  578: Process       
  57C: Thread        
  580: Process       
  584: Thread        
  588: Process       
  58C: Thread        
  590: Event         
  598: Process       
  59C: Thread        
  5A0: Process       
  5A4: Thread        
  5A8: Process       
  5AC: Thread        
  5B0: Process       
  5B4: Thread        
  5B8: Event        

Таким образом, он имеет 400 дополнительных открытых дескрипторов для Process, Thread, Event.В конечном итоге эта утечка приводит к сбою приложения.

Я новичок в программировании Windows, извините, пожалуйста, я задаю очень простые вопросы.Я буду очень признателен за любую помощь / предложение в этом отношении.

  1. Что означает или что означает ручка «Процесс», в каком случае она будет открыта?
  2. Что означает ручка«Поток» указывает или означает, в каком случае он будет открыт?
  3. Почему комбинация двух процессов вызывает утечку ручки?(эти процессы в основном независимы)
  4. Что я могу попытаться понять, такое поведение?
  5. Есть ли какие-либо предложения по устранению подобных ситуаций?
  6. Любые полезные инструменты для пониманиядальше?

1 Ответ

4 голосов
/ 03 февраля 2011

Это довольно классическая ошибка при использовании функции CreateProcess ().Последний аргумент, lpProcessInformation, возвращает обратно PROCESS_INFORMATION.Вы должны вызвать CloseHandle () для возвращенных членов hProcess и hThread, если они вам не интересны.

...