是否可以在线程下创建新线程?

时间:2015-08-18 08:15:41

标签: c++ multithreading boost

我有一个问题:人可以在thread tt下创建新的thread t吗?这个新thread tt需要在memberfunction()中使用成员函数class Athread t调用D()中的独立函数class A。函数D()调用memberfunction()

这些是我的粗略代码:

class A
{
public:
  int memberfunction();
};

void D ()
{
  A class;
  boost::function<int()> f;
  f = boost::bind(&A::memberfunction, &class);   
  boost::thread tt(f);
}

void main()
{
  ...
  boost::thread t(D);
}

步骤boost::thread tt(f);无法创建新线程。你有什么主意吗?还是其他方法?

1 个答案:

答案 0 :(得分:2)

是的,这是可能的。

首先,请在下次提供最小的可编辑示例,例如

#include <functional>
#include <thread>

class A
{
    public:
        int memberfunction() { return 0; }
};

void D ()
{
    A x;
    std::function<int()> f;
    f = std::bind(&A::memberfunction, &x);   
    std::thread tt(f);
    tt.join();
}

int main()
{
    std::thread t(D);
    t.join();
    return 0;
}

(使用g ++ -std = c ++ 11 -pthread file.cpp编译)

请注意,我将boost::thread替换为std::thread,将boost::bind替换为std::bind,并假设两者都相同。

我还插入了一些join次来电。如果您的线程仍然是std::thread,则joinable()的析构函数会抛出异常。如果您没有致电joindetach,就会出现这种情况。

不是真正相关,但你应该避免使用其他任何关键字,即不要为你的变量class命名。