1

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

有这样的功能吗?

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

4

2 回答 2

1

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

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

于 2009-10-13T22:25:43.760 回答
0

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

也就是说......您可以潜在地使用事件来同步。完成 WriteFile() 后,您可以等待事件发出信号。当另一端使用 ReadFile() 完成时,它可以SetEvent()。这可能会奏效,前提是两端具有明确定义的合同并且不会相互竞争或相互僵持。

于 2009-10-13T22:30:34.463 回答