在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(); 
} 
+0

你可以使用C++ 11吗? – mkmostafa

+0

@mkmostafa:是的,我们可以使用C++ 11,(以上代码仅用于解释问题。) – userNew

+0

我已经发布了使用C++ 11的答案。 – mkmostafa

你可以在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(); 


} 

更新:您需要在设置条件后加入线程。这将阻塞主线程直到另一个线程返回。