我在Windows上有一个具有两个线程的应用程序:

First one-正在从某些外部存储读取信息,然后通过WriteFile将其写入管道

Second one-正在使用ReadFile从管道读取信息并对其进行一些操作。

我正在使用通过CreatePipe创建的通常的匿名管道。所以我的问题是-当我关闭写入线程中的管道时,有时读取线程尚未完成读取,这会导致管道损坏。那么,如何确保在关闭管道之前已阅读所有书面信息?

最佳答案

您可以在关闭管道之前尝试FlushFileBuffers()

另一种选择是使用CreateEvent()创建两个事件对象。当写线程完成写操作后,用SetEvent()表示第一个事件,并等待使用WaitForSingleObject()表示第二个事件,然后关闭管道(或写入下一个数据块)。当读取线程检测到已发出第一个事件的信号时,请从管道中读取数据直到没有剩余要读取的内容,然后使用SetEvent()发出第二个事件的信号。

09-10 06:35
查看更多