私は<thread>
C++ 11標準のライブラリ。
次のような機能があるとします。
void func1(int a, int b, ObjA c, ObjB d){
//blahblah implementation
}
int main(int argc, char* argv[]){
std::thread(func1, /*what do do here??*/);
}
これらすべての引数をスレッドにどのように渡しますか?私は次のような引数をリストしようとしました:
std::thread(func1, a,b,c,d);
しかし、そのようなコンストラクターがないことは不満です。これを回避する1つの方法は、引数をパッケージ化する構造体を定義することですが、これを行う別の方法はありますか?
文字通り、オブジェクトが存在する場合にコンパイルされるはずだったstd::thread(func1,a,b,c,d);
でそれらを渡すだけですが、別の理由で間違っています。オブジェクトが作成されていないため、スレッドを結合または切り離すことができず、プログラムは正しく動作しません。これは一時的なものであるため、スレッドはまだ結合または分離されていないため、デストラクタがすぐに呼び出されます_std::terminate
_が呼び出されます。 std::thread(func1,a,b,c,d).join();//or detach
のように、tempが破棄される前に_std::join
_または_std::detach
_できます。
これがどのように行われるべきかです。
_std::thread t(func1,a,b,c,d);
t.join();
_
スレッドをデタッチすることもできます。参加とデタッチの違いがわからない場合は、スレッドを参照してください。
これを取得している場合は、#include <thread>
ファイルの先頭。 OPの署名は機能するはずです。