如何用 WaitForSingleObject 通知文件 HANDLE 等待
How to signal file HANDLE waiting with WaitForSingleObject
我无法控制的这段代码使用重叠 I/O:
读取文件
// Read file asynchronously
HANDLE hFile = CreateFile(..., FILE_FLAG_OVERLAPPED, ...);
BYTE buffer[10];
OVERLAPPED oRead = { 0 };
ReadFile(hFile, buffer, 10, NULL, &oRead);
// Do work while file is being read
...
// Wait for read to finish
WaitForSingleObject(hFile, INFINITE);
// ReadFile has finished
// buffer now contains data which can be used
...
在另一个线程中(实际上是在 ReadFile 的 API 挂钩中),我需要向 hFile
发出信号以解锁 WaitForSingleObject
。通常 Windows(或处理 ReadFile
的设备驱动程序)会这样做,但我需要模拟它。
None of the APIs 我发现通常使用 hFile
来完成这项工作,包括 ReleaseMutex
、ReleaseSemaphore
和 SetEvent
.它们都是 return 错误 6(句柄无效)。是否有 API 适用于文件、命名管道或通信设备?
我知道它是 not recommended 到 WaitForSingleObject(hFile)
,但上面的代码是给定的,我需要使用它。谢谢!
据我所知,向 Windows 内部发送文件句柄信号,即使在 运行 处于内核模式时也没有 API。 (我相信文件系统驱动程序只是告诉 Windows 操作已完成,然后让 Windows 弄清楚如何通知用户模式进程。我可能错了。)
一个解决方案是针对句柄发出真正的 ReadFile(零字节读取可能就足够了)以向其发送信号。
但是挂钩 WaitForSingleObject 可能更明智,检查它是否正在相关文件句柄上调用,如果是,则适当修改行为。
我无法控制的这段代码使用重叠 I/O:
读取文件// Read file asynchronously
HANDLE hFile = CreateFile(..., FILE_FLAG_OVERLAPPED, ...);
BYTE buffer[10];
OVERLAPPED oRead = { 0 };
ReadFile(hFile, buffer, 10, NULL, &oRead);
// Do work while file is being read
...
// Wait for read to finish
WaitForSingleObject(hFile, INFINITE);
// ReadFile has finished
// buffer now contains data which can be used
...
在另一个线程中(实际上是在 ReadFile 的 API 挂钩中),我需要向 hFile
发出信号以解锁 WaitForSingleObject
。通常 Windows(或处理 ReadFile
的设备驱动程序)会这样做,但我需要模拟它。
None of the APIs 我发现通常使用 hFile
来完成这项工作,包括 ReleaseMutex
、ReleaseSemaphore
和 SetEvent
.它们都是 return 错误 6(句柄无效)。是否有 API 适用于文件、命名管道或通信设备?
我知道它是 not recommended 到 WaitForSingleObject(hFile)
,但上面的代码是给定的,我需要使用它。谢谢!
据我所知,向 Windows 内部发送文件句柄信号,即使在 运行 处于内核模式时也没有 API。 (我相信文件系统驱动程序只是告诉 Windows 操作已完成,然后让 Windows 弄清楚如何通知用户模式进程。我可能错了。)
一个解决方案是针对句柄发出真正的 ReadFile(零字节读取可能就足够了)以向其发送信号。
但是挂钩 WaitForSingleObject 可能更明智,检查它是否正在相关文件句柄上调用,如果是,则适当修改行为。