2012-09-13 29 views
0

我正在使用boost线程,我需要从它的线程函数引用一个线程,所以我可以将它存储在具有相应线程ID的映射中。主要想法是我将使用另一个线程通过查询proc表来收集线程统计信息,所以我不能使用boost::this_thread::get_id()。我需要存储线程,以便可以调用特定线程上的中断和连接。C++从它的线程函数引用boost :: thread

下面的插入语句不起作用,但我会期望这个或& this来引用线程。

线程函数:

workerFunc(){ 
    std::string tid; 
    tid=boost::lexical_cast<string>(syscall(SYS_gettid)); 
    threadMap.insert(pair<std::string,boost::thread>(tid,this)); 
} 

目前,我有父使插入,但等待线程来获得它的线程ID,但是这不是什么想要的。

如何在不使用父级的情况下将线程/指针存储到线程?

+1

当你说下列声明不起作用时,你是什么意思?它不编译?或者它没有像预期那样储存这对货币? – Brady

回答

1

通过使用函数而不是函数,您可以添加状态。

+0

我会尝试这个,看看我能否得到它的工作。 – Ralfizzle

+0

一个仿函数实际上就是我所需要的,谢谢! – Ralfizzle

0

不,您不能直接将thread对象传递给您传递给thread的构造函数的函数(或函子)。它有点“鸡蛋或鸡肉”。

应填充此映射的实体是管理器,它创建这些线程对象。为什么你必须“等待线程获取线程ID”?我没有在文档中看到这样的要求 - get_id()适用于任何“执行线程”,即未分离的thread

+0

我正在使用'SYS_gettid',我只能从线程内部调用,因为我使用父来存储线程,所以我需要等待每个线程获取它的'SYS_gettid',然后才能将线程存储一张地图。 – Ralfizzle

+0

@ user1668886我明白了。所以,无论如何,无论如何,你必须等待 - 因为对象创建和物理线程的开始是异步发生的。 –

相关问题