【发布时间】:2015-07-22 02:32:09
【问题描述】:
我一直在尝试确定是否可以跨管道客户端的线程共享管道句柄(在 Windows 上)。我最初的想法是我不能,因为除非我同步线程,否则数据可能会在服务器上交错显示,从而导致问题。但是我现在想知道 PIPE_TYPE_MESSAGE 和 PIPE_READMODE_MESSAGE 的管道是否允许我让一个多线程管道客户端共享一个管道句柄。有人对此有明确的答案吗?
我希望在客户端线程之间共享单个管道句柄的原因是为了节省每次我想发送数据时打开管道的成本。我不能轻松地缓存客户端线程的管道句柄,因为我没有创建客户端线程。
我已经包含了来自https://msdn.microsoft.com/en-us/library/windows/desktop/aa365605(v=vs.85).aspx 的sn-p,它描述了管道类型模式。我已经强调了让我想知道消息模式是否会完成我想要做的事情的部分。
...
类型模式
管道的类型模式决定了数据如何写入一个命名的 管道。数据可以通过命名管道作为流传输 字节或消息流。管道服务器指定 调用 CreateNamedPipe 来创建一个实例时的管道类型 命名管道。对于 a 的所有实例,类型模式必须相同 管道。
要创建字节类型管道,请指定 PIPE_TYPE_BYTE 或使用默认值 价值。数据作为字节流写入管道,并且 系统不区分不同写入的字节 写操作。
要创建消息类型管道,请指定 PIPE_TYPE_MESSAGE。 系统 将每个写入操作中写入管道的字节视为 消息单元。系统总是执行写操作 消息类型的管道,就像启用了直写模式一样。
...
谢谢, 尼克
【问题讨论】:
标签: multithreading client pipe sharing