2016-07-10 16 views
-1

私はこのような一般的なタイトルを赦免します。
OpenGLを使用して3Dでデータを表示する物理シミュレーションアプリケーションを作成しています。重い計算を担当する関数の1つが、パフォーマンスを少し下げているようです。私は数秒間アプリケーションをフリーズせずに "バックグラウンドで"やりたいと思っています。しかし、私の場合、std :: threadは動作しないようです。
私がスレッドしようとしている関数は、その中に多くの計算を持っています。ここでいくつかのメモリが割り当てられ、他の関数が呼び出され、クラスが使用されます。しかし、私が直接DoSomethingSeriousと呼ばれているかのように、それがゼロに効果があることが表示されますアマチュアはstd :: threadの使い方を理解できません

void WrapperFunction(void) 
{ 
std::thread t(DoSomethingSerious); 
t.join(); 
} 

:私はスレッドを起動しようと、そこからラッパー関数を、作成しました。 何が問題なのでしょうか?先に進む前に、終了するスレッドの

+1

はたぶん(::のstd ::スレッド 'をよく読んで参加)':あなたがスレッドを開始し、join()を行うとの中間のアクションを持っている場合

、あなたはに効果に気づくはずです。 – juanchopanza

+0

't.join();'は、スレッドが次の行に進む前に完了するのを待っています。 –

答えて

1

join()待ちます。それがスレッドに加わることです。

2つのオプションがあります。 std::threadをインスタンス化し、実行する必要がある他のものは何でも、そしてすべてが行われた後にのみスレッドに参加するために進んで

1)。

2)detach()スレッド。切り離されたスレッドは独立して実行を続け、これ以上参加できません。この場合、スレッドが停止するまで待機するための他の準備をする必要があります。あなたが直接t.join()を呼び出すためである

+0

ああ、愚かな私。そのとおりです。私はちょうどそれを少し強く尋ねたはずです。私は9分が経過するとすぐにあなたの答えを受け入れます。 –

1

std::thread::join関数は、返す前にスレッドが終了するのを待つためにを待ちます。あなた自身が気づくように、効果は関数を呼び出すだけの違いはないということです。

もっと便利スレッドcrerationとどこでスレッドを待つ間に他の何かをするだろう。次の擬似コードのようなものは:

void WrapperFunction(void) 
{ 
    // Create thread 
    std::thread t(DoSomethingSerious); 

    // Lots 
    // of 
    // code 
    // doing 
    // other 
    // things 

    // Wait for thread to finish 
    t.join(); 
} 
1

しかし、ゼロに効果があることが表示されます。

もちろん、メインスレッドのコードは、非同期スレッドのすべてが終了するまで中断されます。

void WrapperFunction(void) { 
    std::thread t(DoSomethingSerious); 
    // Do something else in parallel 
    t.join(); 
} 
関連する問題