Boost :: this_thread :: get_id()没有字符串操作

时间:2011-10-28 03:16:52

标签: c++ multithreading unix boost

我遇到的情况是我需要将boost :: thread :: id转换为变量,但是这个变量不是字符串,也不允许字符串操作。那可能吗?

可能像

char *tid = (casting something) boost::this_thread::get_id()

这是unix系统上的c ++。 避免使用字符串操作的原因是因为它降低了整个应用程序的速度。谢谢。

2 个答案:

答案 0 :(得分:6)

无论如何,你的问题似乎完全基于误解。如果要将boost::thread::id转换为变量,则变量应为boost::thread::id类型。像这样:

boost::thread::id MyVariable = boost::thread::get_id();

根本不涉及任何字符串。你为什么要把它投到char *

如果您的线程需要经常获取其ID,以至于它造成了瓶颈,那么您可能会做出可怕的错误。为什么你需要这么多线程的ID?

更新:好的,所以你需要一个具有特定语义的线程ID。您需要分配线程ID,这些ID具有您需要的语义。 (无法保证线程已有的ID在文件名中可用。)在伪代码中:

  1. 致电get_id。
  2. 在地图中查找您检索到的ID。
  3. 如果您找到了此ID的条目,请返回其值,您已完成。
  4. 此主题没有可在文件名中使用的ID。所以给它一个。存储从get_id获得的ID对以及您在地图中指定的ID。这将确保您下次尝试获取此主题的条目时,您将获得相同的条目。
  5. 或者,您的平台可能具有提供所需语义的功能。例如,Linux有gettid,NT有GetCurrentThreadId

答案 1 :(得分:4)

怎么样:

std::ostringstream oss;
oss << boost::thread::get_id();
std::string idAsString = oss.str();

请参阅boost::thread::id

上的文档

更新: 由于您已经使用了boost,为什么不使用:

std::string id = boost::lexical_cast<std::string>(boost::thread::get_id());

此外,正如您在开始时所做的那样,速度应该不是问题。