考虑以下场景:
auto h = CreateFile(...);
ReadFileEx(h, ...); // Asynchronous read for a large block of data. say, 1GB.
CloseHandle(h);
// If the read has not yet finished here, what will happen? Big Bang???
最佳答案
只要异步句柄在调用时有效,异步操作将保持有效直到它完成。这是因为异步文件 IO 调用在内核中持有对文件对象的隐式引用计数。
当异步事件完成时,如果在用户模式下不再有指向该文件的句柄,该文件将在内核内部关闭。
请注意,这确实有明显的副作用。特别是,如果您打开文件进行独占读/写,发出异步操作,然后关闭句柄,则在异步操作完成之前,文件将无法打开进行读/写。
关于c - 如果我在对句柄 h 的异步读取尚未完成之前调用 CloseHandle(h) 怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14766465/