【问题标题】:How to indefinitely wait for named pipe creation?如何无限期地等待命名管道创建?
【发布时间】:2015-09-14 07:32:47
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: winapi named-pipes


    【解决方案1】:

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

    为避免潜在的竞争,请使用一个通用的命名互斥体来序列化这些步骤。

    【讨论】:

    • 如果客户端和服务器在不同的机器上呢?命名管道可以跨网络使用。命名的内核对象,如事件,不能。
    • @RemyLebeau 对 IPC 的引用让我假设管道在同一台机器上
    • 并非所有的 IPC 都限制在本地机器上。最值得注意的是管道、邮槽、套接字等。
    猜你喜欢
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    相关资源
    最近更新 更多