Вниз
Скачать: CL | DM;

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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.007 c
3-70629
Mamed
2002-07-01 13:49
2002.07.22
Operator Like HELP!!!!


14-70903
Pill
2002-06-23 11:57
2002.07.22
ищу компонент для построения трехмерных графиков


1-70680
maxim2
2002-07-09 13:05
2002.07.22
Как подстроить свою прогу под расширение монитора пользователя


14-70884
cpp
2002-06-25 09:36
2002.07.22
Нужен компонент для работы с графикой (или алгоритмы)


3-70608
Weare
2002-06-28 12:36
2002.07.22
Не виден индекс по сети...




   Наверх