跳至主要內容

C++ 一句代码打印当前线程ID

muzzik大约 1 分钟笔记编程语言C++多线程

功能代码:
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

📣 觉得很赞?分享给你的朋友吧!