2015-09-14 47 views
0

我有一个连接到命名管道的客户端。很多时候,这个命名管道并不存在,因此客户端连接失败。客户端应尽快连接到管道,因为有时服务器会向连接的客户端发送命令,有时客户端会通知服务器它的状态。如何无限期地等待命名管道的创建?

有没有办法等待无限期地命名管道创建? 基本上我想避免连续呼叫连接/睡眠需要CPU时间。理想的解决方案是避免创建线程。

有一个函数WaitNamedPipe但它实际上等待管道可用,如果它不存在,它立即返回。我相信这就是为什么NamedPipeClientStream.Connect没有指定超时时立即返回。

是否有任何其他IPC适合这个目标?

回答

1

让客户端创建一个命名事件并等待。当服务器启动时,它应该创建管道,然后打开指定的事件。如果事件不存在,则没有客户端正在等待。如果事件确实存在,则服务器发出信号并且客户端的等待结束,并且客户端知道管道已准备就绪。

为避免竞争的可能性,请使用通用名为mutex的序列化这些步骤。

+0

如果客户端和服务器在不同的机器上?命名管道可以通过网络使用。命名的内核对象,如事件,不能。 –

+0

@RemyLebeau对IPC的引用使我认为管道在同一台机器上 –

+0

并非所有的IPC都限于本地机器。最值得注意的是,管道,邮筒,插座等。 –