我有一个问题:人可以在thread tt
下创建新的thread t
吗?这个新thread tt
需要在memberfunction()
中使用成员函数class A
。 thread 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);
无法创建新线程。你有什么主意吗?还是其他方法?
答案 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()
的析构函数会抛出异常。如果您没有致电join
或detach
,就会出现这种情况。
不是真正相关,但你应该避免使用其他任何关键字,即不要为你的变量class
命名。