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