Как изящно остановить серверный процесс, который прослушивает канал в Windows

У меня есть сервер именованных каналов, аналогичный образцу MSDN по адресу http://msdn.microsoft.com/en-us/library/windows/desktop/aa365588(. v=vs.85 ).aspx и хотел бы разрешить клиентам отправлять сообщение «выход», которое приводит к корректной остановке сервера.

Итак, в «InstanceThread ()», если получено специальное сообщение, я хотел бы остановить сервер.

Я попытался остановить вызов ConnectNamedPipe ()в основном потоке из отдельного потока для «InstanceThread ()», закрыв дескриптор канала, но это не работает.

Я уже пробовал разные вещи,среди прочего, закрытие общего канала, выход непосредственно из InstanceThread,... но ни один из них не приводит к остановке вызова ConnectNamedPipe ().

Я играл с SetNamedPipeHandleState (), но это сильно усложняет реализацию, а использование перекрывающихся операций ввода-вывода кажется излишним для этого простого требования.

Итак, есть ли более простой способ заставить ConnectNamedPipe ()вернуться, когда серверный процесс должен быть остановлен, а не ждать бесконечного подключения клиента?

5
задан centic 25 July 2012 в 13:27
поделиться