命名管道问题

时间:2009-10-13 22:16:06

标签: windows winapi named-pipes

是否有一个函数在另一端成功调用管道上的ReadFile时返回。 我有2个应用程序在命名管道上进行通信,一个使用WriteFile在管道上发送请求,并期望一个答案,因此它调用ReadFile。问题是应用程序正在读取自己的请求作为答案,因为另一端还没有将它从管道中删除。

有这样的功能吗?

我知道另一种方法是使用2个单向管道,或者通过让其他应用程序在收到消息时向发送方发出信号来实现某种类型或同步,但我只是检查是否有更简单的方法... < / p>

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找的方法是PeekNamedPipe。此功能允许您在不删除数据的情况下查看管道。您可以使用它来检查并查看刚发送的消息是否仍在管道中。如果是这样,那么另一端还没有阅读消息。

总的来说,我认为你最好使用信号或两个单向管道。它们更适合双向通信。

答案 1 :(得分:0)

您的设计天生就容易出现竞争条件,我建议您改用两根管道。特别是,您是否考虑过两个进程想要写入同一个管道时会发生什么?

那说......您可以使用event进行同步。完成WriteFile()后,您可以wait发出事件信号。当另一端完成ReadFile()时,它可以SetEvent()。这可能有用,只要两端有明确的合同并且不相互竞争或彼此僵局。