如何无限期地等待命名管道创建?

时间:2015-09-14 07:32:48

标签: winapi named-pipes

我有一个连接命名管道的客户端。通常这个命名管道不存在,因此客户端连接失败。客户端应尽快连接到管道,因为有时服务器会向连接的客户端发送命令,有时客户端会通知服务器它的状态。

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

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

还有其他IPC适合这个目标吗?

1 个答案:

答案 0 :(得分:1)

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

为了避免比赛的可能性,请使用常用的名为mutex来序列化这些步骤。