Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Windows上正常停止正在侦听管道的服务器进程_Windows_Visual C++_Named Pipes - Fatal编程技术网

如何在Windows上正常停止正在侦听管道的服务器进程

如何在Windows上正常停止正在侦听管道的服务器进程,windows,visual-c++,named-pipes,Windows,Visual C++,Named Pipes,我有一个类似于的MSDN示例的命名管道服务器,希望允许客户端发送一条“退出”消息,使服务器正常停止 因此,在“InstanceThread()”中,如果收到特殊消息,我希望使服务器停止 我试图通过关闭管道句柄,从“InstanceThread()”的单独线程停止对主线程中ConnectNamedPipe()的调用,但这不起作用 我已经尝试了各种方法,包括关闭整个管道,直接从InstanceThread退出。。。但它们都不会导致对ConnectNamedPipe()的调用停止 我使用了SetNam

我有一个类似于的MSDN示例的命名管道服务器,希望允许客户端发送一条“退出”消息,使服务器正常停止

因此,在“InstanceThread()”中,如果收到特殊消息,我希望使服务器停止

我试图通过关闭管道句柄,从“InstanceThread()”的单独线程停止对主线程中ConnectNamedPipe()的调用,但这不起作用

我已经尝试了各种方法,包括关闭整个管道,直接从InstanceThread退出。。。但它们都不会导致对ConnectNamedPipe()的调用停止

我使用了SetNamedPipeHandleState(),但是它使实现变得非常复杂,而且对于这个简单的需求来说,使用重叠I/O似乎有些过分


那么,有没有更简单的方法让ConnectNamedPipe()在服务器进程应该停止时返回,而不是无休止地等待客户端连接?

如果您不需要支持Windows XP,可以尝试使用

如果流程正在退出,则无需执行任何操作;当Windows中断进程时,线程将终止


或者,您也可以通过自己连接到指定管道来调用退出。

感谢您的提示,CancelSynchronousIo听起来很有希望,但与此同时,我通过在退出例程中执行客户端样式的连接来解决它,即您描述的第三项。