スレッドに関する質問に正確な答えが見つからないようです。私は現在OpenNI2を使ってKinect V2センサーに新しいフレームデータをポーリングするプログラムを持っています。問題は、各タイプのセンサーをポーリングする必要があることです。深度、IR、RGBを別々に取得することができます。ここで私のスレッドの質問が出てくるところです。3つのセンサーのそれぞれを個別のスレッドでポーリングし、すべての関数呼び出しが返されたときにデータ処理を続けます。複数のスレッドを待っているC++
私は新しいスレッドをメインスレッドにリンクして、プログラムが終了する前にすべてのスレッドが終了するようにする方法を理解していますが、特定のスレッドセットが終了するまでプログラムの途中でどのように待つのですか?私が見落としている、またはmutexやセマフォを使って手作業で行う必要がある、C++ 11のstd :: threadの機能や機能はありますか?
擬似コード:
std::thread thread_RGB(Kinect::readFrame(Enum::RGB), kinect_1);
std::thread thread_IR(Kinect::readFrame(Enum::IR), kinect_1);
std::thread thread_depth(Kinect::readFrame(Enum::depth), kinect_1);
// Wait for all threads to finish getting new frame data
...
// Process data here
process_data(kinect_1.RGB_data);
process_data(kinect_1.IR_data);
process_data(kinect_1.depth_data);
結果として、すべてのスレッドに対して「join()」を呼び出します。 –
そうだけど、一度スレッドに参加すれば、すべての実行が終了したかどうかをどうやって伝えますか?すべてのスレッドが完了するまでメインスレッドが終了しないようにするだけで参加しません。実装する方法がわからない部分は、コードの途中で終了するのを待つことです。 – Wired365
'thread_RGB.join(); thread_IR.join(); thread_depth.join(); 'を呼び出すか、スレッドをコンテナに格納し、コンテナのループ内でjoin()を呼び出します。 –