c++11 有可能获取当前线程 id,但它不能转换为整数类型:
cout<<std::this_thread::get_id()<<endl;
输出:139918771783456
cout<<(uint64_t)std::this_thread::get_id()<<endl;
错误:从类型“std::thread::id”到类型“uint64_t”的无效转换与其他类型相同:从类型“std::thread::id”到类型“uint32_t”的无效转换
我真的不想进行指针转换来获取整数线程 id。有没有一些合理的方法(标准,因为我希望它是可移植的)来做到这一点?
原文由 NoSenseEtAl 发布,翻译遵循 CC BY-SA 4.0 许可协议
可移植的解决方案是将您自己生成的 ID 传递到线程中。
std::thread::id
类型仅用于比较,而不用于算术(即,正如它在罐头上所说:一个 _标识符_)。甚至由operator<<
生成的文本表示也是 未指定 的,因此您不能依赖它作为数字的表示。您还可以使用
std::thread::id
值映射到您自己的 id,并在线程之间共享此映射(适当同步),而不是直接传递 id。