windows - 文件句柄上的 WaitForSingleObject?

标签 windows msvcrt

当您在使用 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/

相关文章:

c++ - 在没有 CRT 的情况下转换 DWORD,实现自定义 sprintf() 函数

windows - 用于获取信号强度的 WLAN API

visual-studio - Visual Studio 2017 上的简单汇编程序

windows - 如何禁用 Visual C++ 运行时中的缓冲区溢出检查?

android - 从 Windows 读取 android 短信中的消息

visual-studio - 正在加载哪个版本的 C 运行时库 (CRT)?

c - MinGW 的 msvcrt 替代品? (例如,获得符合要求的 snprintf)

c++ - 遇到这个 FXC 错误?

python - 使用子进程打开 Windows 快捷方式文件 `.lnk`

windows - 删除所有不包含字符串的文件并根据模式重命名文件