【问题标题】:How to print ACE_thread_t using printf()如何使用 printf() 打印 ACE_thread_t
【发布时间】:2009-11-16 15:06:37
【问题描述】:

ACE_OS::thr_self() 返回 ACE_thread_t。 ACE 记录器有一个开关“\t”来打印它。 如果我想使用 printf() 打印线程 id,我该怎么做?

【问题讨论】:

    标签: c++ portability ace


    【解决方案1】:

    如果 ACE 不提供执行此操作的方法,您必须弄清楚它的类型。鉴于它是 ACE,它可能隐藏在嵌套在 5 个#defines 中的 3 个 typedefs 后面。头文件OS_NS_Thread.h 看起来和任何一个起点一样好。

    【讨论】:

    • 如果ACE_thread_t 类似于pthread_t,它将归结为整数(“%d”或“%x”)或指针(“%p”)。这里的基本原理是这些是 (a) 轻量级的,并且 (b) 是独一无二的。情况可能并非如此。 ACE_thread_t 可能是一个复杂类型。如果它是公开的,您可以从中获取 id。如果不是,则需要进行一些 API 调用才能获取实际的线程 ID。不过要非常小心,因为类型可能因平台而异,并且不能保证可移植性。
    • +1 表示“嵌套在 5 个 #defines 中的 3 个 typedefs 后面”!这是 ACE 风格。
    【解决方案2】:

    王牌? C++?为什么不使用 iostream 而不是 printf?

    ACE_thread_t id = ACE_OS::thr_self();
    unsigned char content[sizeof(id)];
    size_t i;
    memcpy(content, &id, sizeof(id) );
    for (i=0; i<sizeof(id); ++i) printf("%02X",content[i]);
    

    【讨论】:

    • 我不明白你在这里使用过 memcpy 和循环吗?
    猜你喜欢
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    相关资源
    最近更新 更多