2016-11-09 7 views
-2

私はスレッド関連のコンセプトに慣れていません。スレッド(i)の一部としてboost.nowを使ってスレッド(NewThread)を生成する関数aいくつかの変数の初期化をしてから、while(1)ループを開始します。C++の特定のアクションの後で、生成されたスレッドから戻る

I(1)、

現在ループしながら起動せずに)(bに到達された制御は、一方の内部に達したとき)(機能Bに制御を与えたいです。

私を導いてください。

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

答えて

0

あなたは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(); 


} 

update:条件を設定した後にスレッドに参加する必要があります。他のスレッドが戻るまでメインスレッドをブロックします。

関連する問題