我在Windows上有一个具有两个线程的应用程序:First one
-正在从某些外部存储读取信息,然后通过WriteFile
将其写入管道Second one
-正在使用ReadFile
从管道读取信息并对其进行一些操作。
我正在使用通过CreatePipe
创建的通常的匿名管道。所以我的问题是-当我关闭写入线程中的管道时,有时读取线程尚未完成读取,这会导致管道损坏。那么,如何确保在关闭管道之前已阅读所有书面信息?
最佳答案
您可以在关闭管道之前尝试FlushFileBuffers()
。
另一种选择是使用CreateEvent()
创建两个事件对象。当写线程完成写操作后,用SetEvent()
表示第一个事件,并等待使用WaitForSingleObject()
表示第二个事件,然后关闭管道(或写入下一个数据块)。当读取线程检测到已发出第一个事件的信号时,请从管道中读取数据直到没有剩余要读取的内容,然后使用SetEvent()
发出第二个事件的信号。