在寫多線程時,由於某些需求,須要得到 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