当前位置: 首页 > 面试题库 >

如何打印pthread_t

田琛
2023-03-14
问题内容

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

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

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

更新:

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

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


问题答案:

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) {
  ...
}


 类似资料:
  • 问题内容: 我正在为具有内置行式打印机的Android设备开发应用程序。我必须与此打印机进行交互,并使用它来打印收据上的详细信息,然后使用裁纸器自动剪切该收据。我已经在其中看到了一些ESC命令,但是我不知道如何执行这些ESC命令。 关于Casio设备打印机,我有三个主要问题: 1.我已经使用了内置打印机的打印代码,但是打印后切纸刀没有激活 2.我不知道如何在android中将ESC命令发送到打印机

  • 问题是,在这种代码状态下,文件和目录是这样打印的: 但是我需要先打开目录,然后打开文件:靠近。我试图找出问题出在哪里,但无济于事。我需要改变什么,在代码中的哪里得到想要的结果?

  • 问题内容: 我发现了这种奇怪: 输出: 这是如何运作的? 问题答案: 该数字适合64位,其二进制表示为: 程序从右到左为每个5位组解码一个字符 对于5位,可以表示2 = 32个字符。英文字母包含26个字母,因此除字母外还留出32-26 = 6个符号的空间。通过这种编码方案,您可以拥有全部26个(一种情况)的英文字母和6个符号(其中是空格)。 算法说明 该从组到组中的for循环跳跃,则5位组被分离安

  • 问题内容: 我有一个JSON文件,我想把它打印成一团糟。在Python中最简单的方法是什么? 我知道PrettyPrint带有一个“对象”,我认为它可以是一个文件,但是我不知道如何传递文件。仅使用文件名是行不通的。 问题答案: 该模块已经实现了一些基本的漂亮打印,其参数指定缩进多少空格: 要解析文件,请使用:

  • 问题内容: 我有一个包含XML的Java字符串,没有换行或缩进。我想将其转换为格式正确的XML字符串。我该怎么做呢? 注意:我的输入是String。我的输出是String。 (基本)模拟结果: 问题答案: 注意:结果可能因Java版本而异。搜索特定于你的平台的解决方法。

  • 问题内容: 在这里很难说出要问什么。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 8年前关闭。 我有一个连接到mysql数据库并在QTableView中显示查询结果的Python和PySide应用程序。我需要打印表视图的内容。这是一些代码: 我找不到为此提供示例,并且我对文档的了解不多,因此希望获得一些帮助