到目前为止,我开始使用 C++11 std::thread (mingw 4.8)。我遇到了 I/O 重叠的情况,其中使用 sleepEx 将线程置于可警告的等待状态。这很有效,直到必须使用 QueueUserAPC,它返回“无效句柄错误”。

经过一番搜索发现std::thread使用的是Windows下的pthread库。

有什么方法可以使用 Windows API 调用,这些调用需要带有 std::thread 的线程句柄?
或者我是否需要坚持使用 Windows 线程来实现重叠 I/O?

最佳答案



不,因为 MinGW 构建中的 std::thread 不是在线程句柄方面实现的。 编辑: 它是,但间接地,请参阅 rubenvb 的答案,了解如何从 pthread_t 获取 native 线程句柄,您应该能够使用 std::thread::native_handle() 来获取 pthread_t

没有人在 GCC 中实现了对 C++11 线程库直接使用原生 Windows 线程的必要支持。

我有一些 ideas 用于新的 thead 模型,该模型将根据 native 互斥体和条件变量实现。这将允许您调用 std::thread::native_handle() 以获取与 Windows API 一起使用的底层线程句柄。

我已经应用了我的更改来重建 GCC,但无法测试它们。对我的建议几乎没有兴趣,也没有任何 MinGW 贡献者提供帮助的提议,所以我不是 Windows 用户,在 Windows 上工作和构建 MinGW 是如此痛苦和令人沮丧,我放弃了。我应该把我的更改放在网上的某个地方,这样有朝一日比我更有耐心的人可以完成工作。

关于windows - mingw std::thread 与 Windows API,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19250008/

10-15 16:09