繁体   English   中英

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

[英]How to gracefully stop a server process which is listening on a pipe on Windows

我在http://msdn.microsoft.com/zh-cn/library/windows/desktop/aa365588(v=vs.85).aspx上有一个类似于MSDN示例的命名管道服务器,并且希望允许客户端发送导致服务器正常停止的“退出”消息。

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

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

我已经尝试了各种方法,其中包括关闭整个管道,直接从InstanceThread中退出,...但是没有一个方法导致对ConnectNamedPipe()的调用停止。

我使用了SetNamedPipeHandleState(),但是它使实现变得非常复杂,对于这个简单的要求,使用重叠的I / O似乎也太过分了。

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

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

如果该过程正在退出,则无需执行任何操作。 Windows拆除进程时,线程将终止。

另外,您可以通过自己直接连接到命名管道来进行对ConnectNamedPipe的调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM