c++ Boost,在类中使用thread_group

C++ Boost, using thread_group in a class

本文关键字:thread group Boost c++      更新时间:2023-10-16
class c
{
public:
    int id;
    boost::thread_group thd;
    c(int id) : id(id) {}
    void operator()()
    {
        thd.create_thread(c(1));
        cout << id << endl;
    }

};

我创建了类c。每个类对象创建线程来处理工作。然而,当我编译这个

时,我得到了这个奇怪的消息

:错误C2248: 'boost::thread_group::thread_group':无法访问在'boost::thread_group'类中声明的私有成员

另外,只要假定没有递归调用问题。

问题是你的代码设置的方式是传递你的对象的副本来创建一个新线程。

你得到这个错误是因为boost::thread_group的复制构造函数是私有的,所以你不能复制类c的对象。你不能复制类c的对象,因为默认的复制构造函数试图复制所有成员,它不能复制boost::thread_group。因此编译器错误。

经典的解决方案是,要么编写自己的复制构造函数,不尝试复制boost::thread_group(如果你实际上想要每个调用一个唯一的thread_group),要么将boost::thread_group存储在某种可以复制的指针中(这将共享组,并且可能是你想要的)。

注意:

通常不编写自己的操作符(),而只是传递boost::函数更简单。这可以用

来完成
#include <boost/thread.hpp>
#include <iostream>
using namespace std;
class c
{
public:
    boost::thread_group thd;
    void myFunc(int id)
    {
        boost::function<void(void)> fun = boost::bind(&c::myFunc,this,1);
        thd.create_thread(fun);
        cout << id << endl;
    }

};

请注意,类c中的任何内容都是共享的,而在函数调用中通过值传递的任何内容都不是共享的。