5

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365588(v=vs.85).aspxにある MSDN サンプルに似た名前付きパイプ サーバーがあり、クライアントが送信できるようにしたいと考えています。サーバーを正常に停止させる「終了」メッセージ。

そこで「InstanceThread()」では、特殊なメッセージを受信したらサーバーを停止させたいと考えています。

「InstanceThread()」のセパレートスレッドからメインスレッドのConnectNamedPipe()の呼び出しをパイプハンドルを閉じることで止めようとしたのですが、うまくいきません。

パイプ全体を閉じる、InstanceThread から直接終了するなど、さまざまなことを既に試しましたが、いずれも ConnectNamedPipe() の呼び出しを停止させません。

私は SetNamedPipeHandleState() で遊んでいましたが、実装が非常に複雑になりました。また、重複した I/O を使用することは、この単純な要件に対してやり過ぎのようです。

サーバープロセスを停止し、クライアント接続を際限なく待機する必要があるときに ConnectNamedPipe() を返す簡単な方法はありますか?

4

1 に答える 1

7

Windows XP をサポートする必要がない場合は、CancelSynchronousIoを使用してみてください。

プロセスが終了している場合は、何もする必要はありません。Windows がプロセスを破棄すると、スレッドは終了します。

または、名前付きパイプに自分で接続するだけで、ConnectNamedPipe出口への呼び出しを行うこともできます。

于 2012-07-25T20:01:50.727 に答える