2010-07-25 2 views
4

Этот день был для меня крутым курсом с точки зрения ручек, безопасных ручек, PInvoke и многих других вещей. Я думаю, что он медленно погружается, но я все еще борюсь с несколькими понятиями:Какую реализацию SafeHandle следует использовать для обработки ручек?

Как узнать, какую реализацию SafeHandle я должен использовать с разными типами дескрипторов?

В частности, то, что реализация SafeHandle следует использовать с технологическими ручками (например, те, в PROCESS_INFORMATION структуре возвращается из вызова CreateProcess

Единственные два открытых реализаций, которые я могу видеть это SafeFileHandle и SafeWaitHandle? - ни один из них не кажется, уместно в данном случае.

Что я должен использовать?

ответ

7

SafeWaitHandle является подходящей один. дескриптор процесса фактически waitable ручки. Вы можете позвонить WaitForSi ngleObject(), и он будет блокироваться до тех пор, пока процесс не завершится. Метод ReleaseHandle вызывает CloseHandle(), если требуется. Вы уверены, что класс Process еще не делает то, что вам нужно?

+0

Мне нужно передать дескриптор к сокету дочернему процессу, поскольку StdIn - класс 'Process', очевидно, не позволит мне это сделать! Кроме того, класс процесса имеет проблему с переменными окружения, которые имеют более низкий регистр в версиях .Net до версии 4.0 (также я хочу понять, как все это работает) – Justin

+0

Erm, так что вы на самом деле говорите о дескрипторе сокета? Вы не можете перенаправлять процесс ввода-вывода через сокеты btw, для которого требуются каналы. Не уверен, что вы пытаетесь сделать. –

+0

Я собирался пойти на реализацию FastCGI в .Net (http://www.fastcgi.com/devkit/doc/fcgi-spec.html) - насколько я могу судить, дескриптор, переданный в StdIn, может быть обращайтесь к сокету (хотя весь этот раздел меня немного смутил - мой подход собирался попробовать и посмотреть, что произойдет!) – Justin

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