是否有可能在线程下创建一个新线程
Is it possible to create a new thread under a thread?
我有一个问题:人类可以在thread t
下创建一个新的thread tt
吗?这个新的thread tt
需要使用class A
中的成员函数memberfunction()
。thread t
从class 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);
}
步骤boost::thread 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;
}
(Compile with c++ -std=c++11 -pthread file.cpp)
请注意,我用std::thread
代替boost::thread
,用std::bind
代替boost::bind
,我假设两者是相同的。
我还插入了一些join
调用。如果线程仍然是joinable()
, std::thread
的析构函数会抛出异常。如果您没有调用join
或detach
,则会出现这种情况。
不太相关,但你应该避免在其他地方使用关键字,即不要将变量命名为class
。
相关文章:
- 用C++中的std::condition_variable将线程置于死锁中会有风险吗
- 是否有必要获取锁并在不需要唤醒线程时通知condition_variable?
- 有没有办法在另一个函数中加入线程?(即超出其自身范围)
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- windows DLL是否有可能在多个线程或进程之间使用相同的套接字编号
- 如果从其他线程访问(读/写)src缓冲区,是否有可能从memcpy获得访问冲突
- 通过引用将循环计数器或范围声明传递给线程有什么区别
- 是否可能/有必要在单独的线程[MFC]中调用OnDraw
- Hi-Link HLK-RM04运行openwrt,是多线程的可能
- 为什么线程有不稳定的行为
- 将函数函数传递给带有函数参数的std::线程.这可能吗?
- c++ 11线程和Boost线程有什么区别吗?
- Valgrind 报告在使用 Boost 线程时"可能丢失"内存
- C++可能的线程问题 - 可能是食人魔的错
- Android上本机线程的可能状态
- 在C++11中,"不代表执行线程"的线程有什么意义?
- 发现可能由于线程锁定(可能)导致的性能问题
- 是否有可能编写可以在HPX和c++ 1x线程之间切换的代码?
- 是否有可能检测到一个线程在Linux中被上下文切换[挂起]
- 单个线程中的多个 tcp 连接,使用 libevent 或 boost::asio。有可能?