如何打印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