当您在使用 CreateFile()
或 _get_osfhandle()
创建的句柄上调用 WaitForSingleObject()
时会发生什么?
出于不值得解释的原因,我想使用 WaitForSingleObject()
来等待我用 _get_osfhandle(fd)
创建的 HANDLE,其中 fd
来自对 _open()
的常规调用。这可能吗?
我在实践中尝试过,在某些机器上它按预期工作(HANDLE 始终处于信号状态,因为您可以从中读取更多数据),而在某些机器上 WaitForSingleObject()
如果你愿意,将无限期地阻止。
WaitForSingleObject()
的 MSDN 页面说它处理的唯一受支持的事情是“更改通知、控制台输入、事件、内存资源通知、互斥锁、进程、信号量、线程和可等待计时器。”
此外,如果我在 CRT 文件描述符上使用 CreateFile()
而不是 _get_osfhandle()
会有所不同吗?
最佳答案
不要这样做。如您所见,它具有未定义的行为。
即使定义了行为,它的定义方式也相对没有用,除非您不喜欢编写额外的代码。当该句柄上的任何异步 I/O 操作完成时,它会发出信号,这并不概括为跟踪哪个 I/O 操作完成。
为什么要等待文件句柄?显然,当您正在做的事情甚至没有得到足够好的支持而不会无限期地阻塞时,意图很重要。
关于windows - 文件句柄上的 WaitForSingleObject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/775014/