我在Windows上有一个有两个主题的应用程序:
First one
- 正在从某些外部存储中读取信息并通过WriteFile
Second one
- 正在使用ReadFile
从管道中读取信息并对其进行一些操作。
我使用通过CreatePipe
创建的常用匿名管道。所以我的问题是 - 当我在写入线程中关闭管道时,有时读取线程还没有完成读取,这会导致管道损坏。那么我怎样才能确保在关闭管道之前已经读取了所有书面信息?
答案 0 :(得分:1)
您可以在关闭管道之前尝试FlushFileBuffers()
。
另一种选择是使用CreateEvent()
创建两个事件对象。写入线程完成写入后,使用SetEvent()
向第一个事件发出信号并等待第二个事件使用WaitForSingleObject()
发出信号,然后关闭管道(或写入下一个数据块)。当读取线程检测到第一个事件已经发出信号时,从管道读取,直到没有任何东西可以读取,然后使用SetEvent()
发出第二个事件的信号。