繁体   English   中英

命名管道问题

[英]Named Pipe Problem

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

有这样的功能吗?

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

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

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

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

就是说...您可以潜在地使用事件进行同步。 在完成WriteFile()之后,您可以等待事件被通知。 当另一端使用ReadFile()完成时,它可以SetEvent() 如果两端之间的合同明确,并且彼此之间不争分夺秒或彼此陷入僵局,那可能会起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM