Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;从其线程函数引用boost::thread_C++_Multithreading_Boost_This - Fatal编程技术网

C++ C++;从其线程函数引用boost::thread

C++ C++;从其线程函数引用boost::thread,c++,multithreading,boost,this,C++,Multithreading,Boost,This,我正在使用boost线程,我需要从它的线程函数中引用一个线程,这样我就可以用它对应的线程id将它存储在一个映射中。主要思想是我将使用另一个线程通过查询proc表来收集线程统计信息,所以我不能使用boost::this_thread::get_id()。我需要存储线程,以便调用特定线程上的中断和连接 下面的insert语句不起作用,但我希望这个or&this引用线程 线程函数: workerFunc(){ std::string tid; tid=boost::lexical_ca

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

下面的insert语句不起作用,但我希望这个or&this引用线程

线程函数:

workerFunc(){
    std::string tid;
    tid=boost::lexical_cast<string>(syscall(SYS_gettid));
    threadMap.insert(pair<std::string,boost::thread>(tid,this));
} 
workerFunc(){
std::字符串tid;
tid=boost::词法转换(syscall(SYS\u getid));
插入(对(tid,this));
} 
目前,我让父线程进行插入,但等待线程获取其线程id,但这不是a想要的


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

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

否,不能直接将
线程
对象传递给传递给
线程
构造函数的函数(或函子)。它有点像“鸡蛋还是鸡”


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

当你说下面的语句不起作用时,你是什么意思?它不编译吗?或者它没有按预期存储这对线程?我使用的是
SYS\u getId
,我只能从线程内部调用它,因为我使用父线程存储线程,所以我需要等待每个线程获得它的
SYS\u getId
,然后才能将线程存储在映射中。@user1668886我明白了。因此,无论如何,您都必须等待,因为对象创建和物理线程的启动是异步进行的。