从std::thread::id取得int值id

在写多线程时,由于某些需求,须要得到 std::this_thread::get_id() 的 std::thread::id 类型值转换为 unsigned int 类型值,而且与cout<<std::this_thread::get_id() 输出值一致多线程

https://stackoverflow.com/questions/7432100/how-to-get-integer-thread-id-in-c11#ide

在 stackoverflow 参考了不少方法后尝试都不尽人意函数

最后跟入 std::thread::id 结构,以下测试

class id{ ... //其他皆为非虚函数
private: _Thrd_t _Thr; }  

其中 _Thrd_t 结构定义以下this

typedef struct { /* thread identifier for Win32 */
    void *_Hnd;    /* Win32 HANDLE */ unsigned int _Id; } _Thrd_imp_t; typedef _Thrd_imp_t _Thrd_t;

其中,_Id 即为咱们想取到的 unsigned int 值spa

因而灵光一闪,只有一个参数且没有虚函数表,利用强大的C++指针岂不是可以很简单很快速的获取到 private 值?线程

在线程中测试以下代码指针

std::thread::id tid = std::this_thread::get_id(); _Thrd_t t = *(_Thrd_t*)(char*)&tid ; unsiged int nId = t._Id

测试经过code

相关文章
相关标签/搜索