如何打印pthread_t

搜索过,但没有找到满意的答案。

我知道没有可移植的方式来打印pthread_t

您如何在您的应用程序中做到这一点?

实际上,我不需要pthread_t,但是需要一些小的数字ID,以便在调试消息中标识不同的线程。

在我的系统(64位RHEL 5.3)上,它被定义为unsigned long int,因此它的数量很大,仅打印它就在调试行中占据了宝贵的位置。

如何 短消息?

回答:

pthread_t不管实际是什么,这都会打印出a的十六进制表示形式:

void fprintPt(FILE *f, pthread_t pt) {

unsigned char *ptc = (unsigned char*)(void*)(&pt);

fprintf(f, "0x");

for (size_t i=0; i<sizeof(pt); i++) {

fprintf(f, "%02x", (unsigned)(ptc[i]));

}

}

只需为每个打印一个小的id,pthread_t可以使用如下所示的东西(这次使用iostreams):

void printPt(std::ostream &strm, pthread_t pt) {

static int nextindex = 0;

static std::map<pthread_t, int> ids;

if (ids.find(pt) == ids.end()) {

ids[pt] = nextindex++;

}

strm << ids[pt];

}

根据平台及其实际表示,pthread_t此处可能需要定义operator<for

pthread_t,因为std::map需要对元素进行排序:

bool operator<(const pthread_t &left, const pthread_t &right) {

...

}

以上是 如何打印pthread_t 的全部内容, 来源链接: utcz.com/qa/433561.html

回到顶部