0

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

以下插入语句不起作用,但我希望 this 或 &this 引用该线程。

线程功能:

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

目前,我让父级插入但等待线程获取其线程 ID,但这不是我们想要的。

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

4

2 回答 2

1

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

于 2012-09-13T14:52:00.087 回答
0

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

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

于 2012-09-13T15:30:10.530 回答