【发布时间】:2009-11-16 15:06:37
【问题描述】:
ACE_OS::thr_self() 返回 ACE_thread_t。 ACE 记录器有一个开关“\t”来打印它。 如果我想使用 printf() 打印线程 id,我该怎么做?
【问题讨论】:
标签: c++ portability ace
ACE_OS::thr_self() 返回 ACE_thread_t。 ACE 记录器有一个开关“\t”来打印它。 如果我想使用 printf() 打印线程 id,我该怎么做?
【问题讨论】:
标签: c++ portability ace
如果 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。不过要非常小心,因为类型可能因平台而异,并且不能保证可移植性。
王牌? 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]);
【讨论】: