Boost::this_thread::get_id()无字符串操作

Boost::this_thread::get_id() without string operation

本文关键字:字符串 操作 get this thread Boost id      更新时间:2023-10-16

我在一个情况下,我需要得到boost::thread::id到一个变量,但这个变量不是字符串,字符串操作是不允许的。这可能吗?

比如

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

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

无论如何,你的问题似乎完全是基于一种误解。如果你想把boost::thread::id变成一个变量,那么这个变量的类型应该是boost::thread::id。这样的:

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

根本不涉及字符串。你为什么要把它转换成char * ?

如果您的线程经常需要获取它们的id,这会造成瓶颈,那么您可能正在做一些可怕的错误。为什么这么需要线程的ID ?

Update:好的,所以您需要一个具有特定语义的线程ID。您需要分配具有所需语义的线程id。(不能保证线程已经拥有的ID在文件名中是可用的。)在伪代码:

  1. 调用get_id。
  2. 在地图中查找您检索到的ID。
  3. 如果你找到了这个ID的条目,返回它的值,你完成了。
  4. 这个线程没有可以在文件名中使用的ID。所以给它赋1。存储您从get_id获得的ID对和您刚刚在映射中分配的ID对。这将确保下次您尝试获取该线程的条目时,您将获得相同的条目。

或者,您的平台可能具有提供所需语义的函数。例如,Linux有gettid, NT有GetCurrentThreadId

怎么样:

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());

此外,由于您只在开始时执行此操作,因此速度应该不是问题。