C++ 一句代碼打印當前線程ID

功能代碼:
printf("ThreadID: %d\n", GetCurrentThreadId()); //經測試這個函數速度更快
printf("ThreadID: %d\n", (*(uint32_t*)&std::this_thread::get_id());

我們要獲取線程id,那麼必然要用到get_id這個函數,那麼我們看看這個函數返回的是什麼。
在這裏插入圖片描述
看到了嗎, _Thrd_id()其實是一個uint32_t類型的返回值,但是卻被轉換成了thread::id類型,
那麼我們再來看看thread::id這個類裏面有什麼吧。
在這裏插入圖片描述.看到了,裏面就只有一個成員變量, 那就是類型爲uint32_t的_Id, 那麼我相信這時候大部分學過C++的同學都知道了吧, 那就是獲取類成員地址在類中的偏移量 &類實例+偏移量 = 我們想要的成員地址, 因爲thread::id類只有一個成員變量, 那麼偏移量就爲0, 所以就直接通過&std::this_thread::get_id()就拿到了我們想要的id類成員地址, 這時候再在前面加上*(uint32_t*)通過轉指針解引用我們就拿到了想要的線程id, 是不是很簡單?
本來之前在網上想看看別人怎麼獲取線程ID的, 結果一堆輸入輸出,強轉… ,一行代碼搞定的事非要
弄個三四行還要用上各種平時不怎麼用的類這些, 然後自己看了下thread::id的代碼,現在發上來。

另外推薦GetCurrentThreadId()這個函數 可以直接獲取當前線程id

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章