Форум: "Основная";
Текущий архив: 2002.07.22;
Скачать: [xml.tar.bz2];
ВнизHandles и Named Pipes Найти похожие ветки
← →
Fiend (2002-07-11 16:54) [0]Такая вот проблема:
Создаю именованный канал блокирующем в режиме (с флагом PIPE_WAIT). Когда выполняю ему ConnectNamedPipe, то он соответственно не завершает выполнение этой функции, а ждёт подключения клиента. Всё это выполняется в отдельном потоке.
Возникает такая ситуация когда мне нужно закрыть канал, причём просто сделать CloseHandle не помогает, т.к. в этот момент поток с каналом застыл на операции ConnectNamedPipe, и выполнение этой операции приводит к ожиданию потоком вызывающим CloseHandle, пока не завершится ConnectNamedPipe.
В принципе я эту проблему решаю так: подключаюсь к каналу из другого потока к каналу нужного трэда, предварительно установив в потоке переменную, определяющую необходимость завершения работы потока. Всё работает нормально. Но всё же хочется услышать мнение, может есть более простой способ убить канал, а за ним и поток. Именно "убить", т.к. мне на момент этой необходимости, мне уже не важны никакие данные ни канала, ни потока.
ЧТО СКАЖЕТЕ, УВАЖАЕМЫЕ
← →
Eugene Lachinov (2002-07-11 17:14) [1]Наверно, использовать второй параметр функции ConnectNamedPipe
← →
Игорь Шевченко (2002-07-11 17:15) [2]Я бы сделал неблокированный канал...
Или SetNamedPipeHandleState для разблокировки.
← →
Fiend (2002-07-11 17:19) [3]То Игорь Шевченко
это было бы неплохо, но дело в том что его как раз надо закрыть когда выполняется ожидание коннекта, и если выполнить настройку хэндла, то поток замирает на этой операции и ждёт видимо освобождения хэндла
← →
Игорь Шевченко (2002-07-11 17:22) [4]Fiend © (11.07.02 17:19)
Я работал с неблокированными и асинхронными каналами. Потому более полно ответить затрудняюсь :-(
← →
Fiend (2002-07-11 17:25) [5]а вот интересная вещь происходит:
Как же система уничтожает хэндлы на мои каналы, когда я завершаю приложение, но сам каналы за собой не закрываю.
КАК ЕЙ ЭТО УДАЁТСЯ????
Может есть какое нибудь средство типа KillHandle(сам придумал).
← →
Игорь Шевченко (2002-07-11 17:27) [6]Fiend © (11.07.02 17:25)
> Может есть какое нибудь средство типа KillHandle(сам придумал).
Примерно так...У всех объектов, числящихся за процессом, при завершении процесса уменьшается счетчик использования. Если счетчик стал равен 0, то объект удаляется.
← →
Fiend (2002-07-11 17:35) [7]То Игорь Шевченко
Можно как то управлять этим процессом?
> Примерно так...У всех объектов, числящихся за процессом,
> при завершении процесса уменьшается счетчик использования.
> Если счетчик стал равен 0, то объект удаляется.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.07.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c