c++ - 记录线程 ID 的最后八个字符?

标签 c++ multithreading

在我的多线程程序中,我正在记录进程 ID 和线程 ID。线程id是使用pthread_self()函数生成的。当我以十六进制打印时,通常它有 12 个字符,其中前四个字符总是常见的,我不想记录它们。

C++ 中打印最后 8 个字符的最佳方法是什么,我尝试使用 boost::format 但不知道如何打印最后 8 个字符。

例如 这里打印十进制的进程 ID 和十六进制的线程 ID。

 std::cout << boost::format("%5d|%8X") %getpid() %pthread_self()

我已经让它与下面的解决方案一起工作,但我不喜欢神奇的数字 10000000000

std::cout << boost::format("%5d|%8X") %getpid() %(pthread_self()%10000000000)

注意:为了简单起见,这里我使用了 std::cout。在我的应用程序中,我使用 boost::log 因此,如果有办法使用 boost log,这是首选。

这是一个示例:7f08 很常见,在调试中没有任何值(value)。

14833|7f084b7fe700

14833|7f084bfff700

14833|7f0850dec700

14833|7f08515ed700

14833|7f0851dee700

14833|7f08525ef700

14833|7f0852df0700

14833|7f08535f1700

最佳答案

你的魔法常数应该是十六进制:

pthread_self() & 0xffffffff

这允许底部 8 个十六进制数字中的位保持不变,但将较高的十六进制数字中的位设置为 0。然后它们应该被抑制,因为您没有指定前导 0 打印。

关于c++ - 记录线程 ID 的最后八个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5280642/

相关文章:

c++ - 如何解决窗口焦点问题?

java - 单元测试阻塞流程

python - 线程模块的引用未被 gc 删除

C++将具有构造函数的对象添加到数组

c++ - 互斥体超时还需要释放吗?

linux - 在 Linux 中增加线程的优先级

java - 数据库多线程插入(更新)和单线程顺序插入(更新)的性能比较?

c# - 新方法 : Implementing INFINITE LOOP which can be STOPPED upon request

c++ - 使用 alloca 时发生访问冲突

c++ - 我可以在范围内创建指向模板函数的指针吗?