mingw std::thread 与 Windows API

Wal*_*orf 3 windows mingw c++11 stdthread

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

经过一番搜索发现,std::thread在Windows下使用了pthread库。

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

rub*_*nvb 5

为了解决您的问题,MinGW-w64 winpthreads(您正在使用的 pthreads 实现),就像pthreads-win32 一样,允许您获取 pthread 的本机 Win32 线程句柄:

void * pthread_gethandle (pthread_t t);
Run Code Online (Sandbox Code Playgroud)

请注意,这是目前未公开的功能。

pthreads-win32中对应的函数是:

HANDLE pthread_getw32threadhandle_np(pthread_t thread);
Run Code Online (Sandbox Code Playgroud)

我敢打赌,这将使您将两者混合在一起,或者至少揭示 winpthreads 中可以修复的一些错误。在后一种情况下,请将它们报告给 MinGW-w64。

如果上述返回无效句柄,最好的办法是在 MinGW-w64-public 邮件列表上询问(先订阅,否则您将不得不等待手动审核,这很愚蠢)。