2017-01-23 29 views
0

私は多くの人がこの質問をしていますが、「多くの人」ではないことを知っています。理解するためには別の説明が必要です。スレッド上の "detach()"とは何ですか? CPP

メンバ関数 "detach()"は正確に何をしていますか? 私は、次のサンプルコードを実行してみました:

#include <iostream> 
#include <chrono> 
#include <thread> 

void independentThread() 
{ 
    std::cout << "Starting concurrent thread.\n"; 
    std::this_thread::sleep_for(std::chrono::seconds(200)); 
    std::cout << "Exiting concurrent thread.\n"; 
} 

void threadCaller() 
{ 
    std::cout << "Starting thread caller.\n"; 
    std::thread t(independentThread); 
    t.detach(); 
    std::this_thread::sleep_for(std::chrono::seconds(1)); 
    std::cout << "Exiting thread caller.\n"; 
} 

int main() 
{ 
    threadCaller(); 
    std::this_thread::sleep_for(std::chrono::seconds(5)); 
} 

そして5秒後に、すべてのプログラムを閉じました。 私はプログラムが "メイン"クローズ後に別の195秒後に開かれると思った。なぜなら、 "デタッチ"のすべてのアイデアはメインとは独立しているから独立した方法で、分離されたすべてのtheradesが終わるまで... ドキュメントを読み、ここに来ました。 より良い説明 - してください! :)

+0

['std :: async'](http://en.cppreference.com/w/cpp/thread/async)を使用すると、簡単に作業できます。 –

答えて

0

デタッチされたスレッドは、完了するまで待つことのできないスレッドです。 std::threadデストラクタはスレッドが切り離されているか結合されているかどうかをチェックし、どちらも起こらなければプログラムを中止します(std::terminate)。

main()が終了した後、プログラムは無条件に終了し、スレッドや分離されたスレッドなどを待たずに終了します。

+0

私はあなたを理解できませんでした...だから、なぜそれが必要ですか?例えばpythonでは、 "detach"はなく、プログラム自体は中断しません!なぜ私はそれを使用する必要がありますか?それは私をhellping何ですか? –

+0

@fdwfgwdfwdfv、多分あなたを助けてくれないでしょう。あなたはPythonに固執したいかもしれません。 – SergeyA

+0

私は理解することができますので、それをより良く説明してください。 –

関連する問題