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

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