在C++中的特定动作之后从产生的线程返回
问题描述:
我是新来的线程相关的概念。我有主函数的程序,我调用函数a(),产生一个线程(NewThread)使用boost.now作为线程的一部分我做一些变量的初始化,然后开始一个while(1)循环。在C++中的特定动作之后从产生的线程返回
欲得到控制函数b()当控制到达内部,而(1),
目前它在到达至B(),而不while循环开始。
请指导我。
void NewThread()
{
//initialization of some modules
//infinite while loop
while(1)
{
}
}
void a()
{
this->libThread = new boost::thread(boost::bind(&NewThread));
}
void b()
{
cout<<"function b";
}
int main()
{
a();
b();
}
答
你可以在C++ 11中使用类似的东西。请注意,您需要为条件使用原子变量,您不能只使用布尔变量。你也可以使用一个条件变量。
#include <thread>
#include <atomic>
#include <memory>
std::unique_ptr<std::thread> t;
std::atomic<bool> condition(false);
void f() {
while(true) {
if(condition) {
return;
}
}
}
void a() {
t.reset(new std::thread(&f));
}
void b() {
condition = true;
t->join();
}
int main() {
a();
b();
}
更新:您需要在设置条件后加入线程。这将阻塞主线程直到另一个线程返回。
你可以使用C++ 11吗? – mkmostafa
@mkmostafa:是的,我们可以使用C++ 11,(以上代码仅用于解释问题。) – userNew
我已经发布了使用C++ 11的答案。 – mkmostafa