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?
为了解决您的问题,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 邮件列表上询问(先订阅,否则您将不得不等待手动审核,这很愚蠢)。
| 归档时间: |
|
| 查看次数: |
2296 次 |
| 最近记录: |