如何在Windows和Linux下c 获取当前线程id的ID号

本帖子已过去太久远了,不再提供回复功能。本帖子已过去太久远了,不再提供回复功能。3被浏览4,529分享邀请回答QString threadText;
#ifdef Q_OS_WIN
threadText = QString::number(DWORD(QThread::currentThreadId()));
#elif Q_OS_LINUX
threadText = ...
为何不直接简单的一句搞定呢QString threadText = QStringLiteral("@0x%1").arg(quintptr(QThread::currentThreadId()), 16, 16, QLatin1Char('0'));
这样,不但编码方便了,而且在不同平台下的描述方式也统一的,更适合题主需要的用QString描述thread的需求。这里我用了一些复杂特性,简单点的话直接QString::number(quintptr(QThread::currentThreadId()))就行了,我这么写是为了提高可读性和性能:使用QStringLiteral宏在编译期构造好"@0x%1"对应的QString对象,多多少少提高一点点效率,比如这个QString会和__FILE__、__LINE__、__FUNCTION__一起记入每条日志的话,能快一点是一点使用QString::arg()进行格式化输出,以对其输出,方便阅读。输出格式是16进制,输出宽度是16字符,为的是兼容32位和64位平台——64位平台下,指针是8字节而非4字节把指针转为quintptr类型,这个是qt自制的union类型,可以当指针用,也可以当整形用,方便用在打印地址的情况,适合替代void*输出格式为@0xabcdef,和Qt调试模式下的内存地址描述格式统一,方便阅读相对于threadId记录了平台实际的thread编号来说,QThread*也记录了thread对象地址,在需要进行debug时同样可以用来追踪现场参考:79 条评论分享收藏感谢收起01 条评论分享收藏感谢收起写回答他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 java 获取当前线程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信