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 回答