很明显,如果你打开一个文件使用FILE_FLAG_OVERLAPPED你需要提供OVERLAPPED结构,你需要在返回时等待ERROR_IO_PENDING,如果你不提供hEvent它在文件句柄上等待。在这种情况下,等待文件句柄是不可靠的,因为任何完成的操作都会向文件句柄发出信号。
现在如果没有打开FILE_FLAG_OVERLAPPED你仍然可以提供OVERLAPPED结构。假设您在没有 hEvent 的情况下提供它或根本没有提供OVERLAPPED,它在内部做什么?如果它正在等待文件句柄,那么在多线程中使用相同句柄进行文件 IO 的多线程应用程序中似乎是不可靠的。
如果它是多线程不可靠的并且hEvent每个 IO 都需要一个,那么涉及多少开销CreateEvent?如果不是,它是否在内部创建一个事件并且它是否具有相同的开销?
我需要在支持库中提供以重叠模式打开 PhysicalDrive 的功能,但仍然支持它们的同步操作。将创建一组用于重叠读/写的新函数。对于现有的函数调用,我打算等待句柄,但我认为这是一个问题。因此,我可以每次创建一个事件,也可以创建一个共享的一次性事件并使用 aMutex来序列化请求,只有这样才能杀死任何 NCQ 类型的性能提升,尤其是在不使用写入缓存的情况下。了解 Windows 在内部做了什么会有很大帮助。
蒂亚!!