假设我有一个带静态函数的单例对象:
static int MySingletonObject::getInt()
现在我想返回一个不同的int,具体取决于哪个workthread(MFC线程)正在调用该函数。
我知道我可以在创建线程时将参数传递给threading函数。但有没有办法在没有这些参数信息的情况下识别线程?
谢谢!
答案 0 :(得分:3)
你可以调用GetCurrentThreadId() - 将返回一个整数标识符 - 或者GetCurrentThread() - 将返回一个可以强制转换为整数标识符的句柄 - 来自任何线程 - 这些值对于任何线程都是唯一的在这个过程中。
答案 1 :(得分:3)
您想要的是线程本地存储。对于TLS的Windows实现,请阅读此内容:http://msdn.microsoft.com/en-us/library/ms686991%28VS.85%29.aspx
答案 2 :(得分:2)
调用GetCurrentThreadId(在Windows机器上)它将返回调用函数正在运行的上下文中的线程ID
答案 3 :(得分:0)
听起来你正在寻找线程本地存储,因为Igor建议 - 我会选择使用boost.Thread代码(documentation here),因为:
通常有用且方便这类任务
(实际上我想知道你是否真的想要创建一些类似于boost :: thread_specific_ptr的东西,根据你所说的你的需求)