從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

相關文章
相關標籤/搜索