我遇到的情况是我需要将boost :: thread :: id转换为变量,但是这个变量不是字符串,也不允许字符串操作。那可能吗?
可能像
char *tid = (casting something) boost::this_thread::get_id()
这是unix系统上的c ++。 避免使用字符串操作的原因是因为它降低了整个应用程序的速度。谢谢。
答案 0 :(得分:6)
无论如何,你的问题似乎完全基于误解。如果要将boost::thread::id
转换为变量,则变量应为boost::thread::id
类型。像这样:
boost::thread::id MyVariable = boost::thread::get_id();
根本不涉及任何字符串。你为什么要把它投到char *
?
如果您的线程需要经常获取其ID,以至于它造成了瓶颈,那么您可能会做出可怕的错误。为什么你需要这么多线程的ID?
更新:好的,所以你需要一个具有特定语义的线程ID。您需要分配线程ID,这些ID具有您需要的语义。 (无法保证线程已有的ID在文件名中可用。)在伪代码中:
或者,您的平台可能具有提供所需语义的功能。例如,Linux有gettid
,NT有GetCurrentThreadId
。
答案 1 :(得分:4)
怎么样:
std::ostringstream oss;
oss << boost::thread::get_id();
std::string idAsString = oss.str();
上的文档
更新: 由于您已经使用了boost,为什么不使用:
std::string id = boost::lexical_cast<std::string>(boost::thread::get_id());
此外,正如您在开始时所做的那样,速度应该不是问题。