c ++ 11有可能获得当前的线程ID,但它不能转换为整数类型:
cout<<std::this_thread::get_id()<<endl;
Run Code Online (Sandbox Code Playgroud)
输出:139918771783456
cout<<(uint64_t)std::this_thread::get_id()<<endl;
Run Code Online (Sandbox Code Playgroud)
错误:从类型'std :: thread :: id'到类型'uint64_t'的无效强制转换与其他类型相同:从类型'std :: thread :: id'到类型'uint32_t'的无效强制转换
我真的不想做指针转换来获取整数线程ID.是否有一些合理的方法(标准因为我希望它是便携式的)来做到这一点?
哪个C++编译器目前在Windows平台上有完整的 C++ 11支持?
Microsoft编译器目前没有完整的C++ 11支持(并且不会很快添加它).
MinGW g ++(来自mingw.org)不支持std::thread开箱即用.它也无法编译Qt 4源(在构建QtGuid4.dll时耗尽内存,已知的解决方法对我不起作用).
我已经浪费了好几天试图让Windows上的clang工作,设法编译它,但无法启用c ++ 11支持,因为它需要libstdc ++(我认为)当时没有移植到Windows平台.Qt 4也不支持它.
那里还有什么?我已经为C++ 03工作了很长时间,我想给新功能一个旋转,但我真的不想要一个不完全支持的工具(这会增加额外的头痛,同时写一个代码)或链接库时可能耗尽内存(在8GB系统上).
我正在使用Windows 7 64位,虽然有64位支持会很好,但我最感兴趣的是32位应用程序,因此生成64位可执行文件的能力是可选的.
有什么建议?
在以下代码段中,
void foo() {
std::this_thread::native_handle().... //error here
}
int main() {
std::thread t1(foo);
t1.join();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
你如何获得的native_handle从std::this_thread从函数内foo?