Boost::this_thread::get_id()无字符串操作
Boost::this_thread::get_id() without string operation
我在一个情况下,我需要得到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在文件名中是可用的。)在伪代码:
- 调用get_id。
- 在地图中查找您检索到的ID。
- 如果你找到了这个ID的条目,返回它的值,你完成了。 这个线程没有可以在文件名中使用的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());
此外,由于您只在开始时执行此操作,因此速度应该不是问题。
相关文章:
- 字符串操作 - 字符计数
- 字符串操作主题消息
- 在MySql中使用字符串操作函数有什么问题
- 如何在没有外部库的情况下使用C++03约束执行基于正则表达式的字符串操作
- 如何使用 Win32 WCHAR 执行字符串操作
- 基本字符串操作有问题 [c++, Visual Studio 2013]
- 字符串操作 C++ 在字符串之后存储整数
- 将字符数复制到新字符串位置的字符串操作,例如 S[0]
- C 比较字符串操作速度
- C++子字符串/字符串操作
- 高级文件和字符串操作
- 使用字符串操作截断整数
- C#和C++中字符串操作的不同基准测试
- 是否有不涉及 I/O 流的 mingw 库原生的就地字符串操作方法
- 如何使用字符串操作来获取输入文本文件的某些部分
- c++中的字符串操作
- 字符串操作性能问题
- 字符串操作,完全不知所措
- std::C++生成器 6 上的字符串操作错误
- 在此字符串操作代码中获取out_of_range错误