2009-11-29 4 views
3

Я замечаю дескриптор приложений, когда я использую функцию оболочки, чтобы открыть его. Затем я использую этот дескриптор, чтобы закрыть приложение позже. Однако пользователь может также закрыть это другое приложение. Может ли этот дескриптор использоваться повторно, поэтому, когда я использую этот дескриптор, я закрываю другой процесс. Если возможно, возможно?Как часто обрабатываются дескрипторы окон

ответ

4

Нет, вам не о чем беспокоиться. Обработчик, возвращаемый, например, OpenProcess, ShellExecuteEx() или CreateProcess, сохраняет объект процесса в активном состоянии. Вот как можно вызвать GetExitCodeProcess() для извлечения кода выхода после завершения процесса.

Объект не освобождается до тех пор, пока последний ручка на нем не будет закрыта. В отличие от предыдущих советов, приведенных в этом потоке, очень важно, чтобы вы вызывали CloseHandle() или у вас была утечка.

+0

Спасибо, но я не совсем понимаю. Утечка памяти здесь в результате закрытия handle(), не вызываемого. Будет ли он очищен, как только приложение, которое вызвало вызов оболочки, было правильно закрыто? – jjb

+0

Да, Windows очищает ручки, которые не были закрыты. Не позволяйте этому зайти так далеко. –

+0

wont just call sendmessage Call SendMessage (intHandle, const_CLOSE, 0 &, 0 &) оба делают приложение и выполняют задание closehandle() в одно и то же время? – jjb

3

Вы можете подождать, пока ручка процесса не появится, когда она выйдет.

WaitForSingleObject (hProcess, INFINITE);

Как только это вернется, вы знаете, что процесс завершился, и вам не нужно его закрывать.

+3

Нет, для предотвращения утечки требуется вызвать CloseHandle(). –

+0

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

Смежные вопросы