我有一个类似于http://msdn.microsoft.com/en-us/library/windows/desktop/aa365588(v=vs.85).aspx的MSDN示例的命名管道服务器,并希望允许客户端发送“退出”消息,使服务器正常停止。
所以在“InstanceThread()”中,如果收到特殊消息,我想让服务器停止。
我试图通过关闭管道句柄从“InstanceThread()”的单独线程中停止对主线程中ConnectNamedPipe()的调用,但这不起作用。
我已经尝试了各种各样的东西,其中包括关闭整个管道,直接从InstanceThread退出,但是它们都没有导致对ConnectNamedPipe()的调用停止。
我使用了SetNamedPipeHandleState(),但它使实现变得非常复杂,同样使用重叠I / O对于这个简单的要求来说似乎有些过分。
当服务器进程停止而不是无休止地等待客户端连接时,有更简单的方法让ConnectNamedPipe()返回吗?
答案 0 :(得分:6)
如果您不需要支持Windows XP,可以尝试使用CancelSynchronousIo。
如果流程退出,则无需执行任何操作;当Windows取消该过程时,该线程将被终止。
或者,您可以通过自己连接到命名管道来调用ConnectNamedPipe。