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

use*_*305 2 c++ unix multithreading boost

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

也许是这样的

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

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

Dav*_*rtz 6

无论如何,你的问题似乎完全基于一种误解.如果要获取boost::thread::id变量,则变量应为类型boost::thread::id.像这样:

boost::thread::id MyVariable = boost::thread::get_id();
Run Code Online (Sandbox Code Playgroud)

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

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

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

  1. 调用get_id.
  2. 在地图中查找您检索到的ID.
  3. 如果您找到此ID的条目,则返回其值,您就完成了.
  4. 此线程没有可在文件名中使用的ID.所以给它一个.存储从get_id获得的ID对以及您在地图中指定的ID.这将确保您下次尝试获取此线程的条目时,您将获得相同的条目.

或者,您的平台可能具有提供所需语义的功能.例如,Linux有gettid和NT有GetCurrentThreadId.