C++ 可以在线程下创建新线程吗?
我有一个问题:人类能否在C++ 可以在线程下创建新线程吗?,c++,multithreading,boost,C++,Multithreading,Boost,我有一个问题:人类能否在线程t下创建一个新的线程tt?这个新的线程tt需要在class a中使用成员函数memberfunction()。线程t调用类a之外的独立函数D()。函数D()调用memberfunction() 以下是我的大致代码: class A { public: int memberfunction(); }; void D () { A class; boost::function<int()> f; f = boost::bind(&A:
线程t
下创建一个新的线程tt
?这个新的线程tt
需要在class a
中使用成员函数memberfunction()
。线程t
调用类a
之外的独立函数D()。函数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);
}
A类
{
公众:
int memberfunction();
};
无效D()
{
一个班级;
boost::函数f;
f=boost::bind(&A::memberfunction,&class);
boost::线程tt(f);
}
void main()
{
...
boost::线程t(D);
}
步骤boost::线程tt(f)代码>无法创建新线程。你知道吗?还是其他方法?是的,这是可能的
首先,下次请提供一个最小的、可编译的示例,例如
#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;
}
#包括
#包括
甲级
{
公众:
int memberfunction(){return 0;}
};
无效D()
{
A x;
std::函数f;
f=std::bind(&A::memberfunction,&x);
标准:螺纹tt(f);
tt.join();
}
int main()
{
标准:螺纹t(D);
t、 join();
返回0;
}
(使用g++-std=c++11-pthread file.cpp编译)
请注意,我将boost::thread
替换为std::thread
,将boost::bind
替换为std::bind
,并且我假设两者相同
我还插入了一些join
调用。如果线程仍然是可连接的()
,则std::thread
的析构函数将引发异常。如果未调用join
或detach
,则会出现这种情况
并非真正相关,但您应避免在任何其他内容中使用关键字,即不要命名变量类
请完整描述预期行为和实际行为。提供一个完整的、自包含的示例,该示例只需编译即可。你不太可能简单地启动tt而什么也不做。线程与访问可见性无关。@gd1出于机密原因,我无法提供完整的示例。编译时没有错误。在VS2010的调试窗口中,我看到线程tt没有被创建,而线程t被成功创建。事实上,您必须构建一个自包含的示例来演示您所描述的问题。谷歌搜索SSCCE。提供不可编译的代码示例(这不是问题的主题)会让人恼火。@gd1感谢您的建议。我下次再做谢谢你的回答。创建了线程tt。我在一家公司从事一个大项目,我无法提供原始代码,因此我重写了它。你说得对,下次我会提供一个可以编译的例子。