スレッドの配列を持っていて、for
ループにすべてのスレッドを作成する必要があります。スレッド関数に複数の引数を取るC++ 11
パラメータの1つがstd::move(promise_var)
で、もう1つが構造体であるという問題があります。私はそれがコンパイルコンパイルしようとする私にエラー与える:だから、
error: no matching function for call to ‘
std::thread::thread(void (&)(Function), Structure [nNumThreads], std::remove_reference<std::promise<const char*>&>::type)
’
を、ここではコードの簡易版は、私が追加できるように、(コメントに置かない...
func(struct Structure, std::promise<const char *> && v_Promise){
//doing work
}
main(){
std::thread a_Threads[5];
for(int8_t i = 0; i < 5; i++){
a_Threads[i] = std::threads(func, Structure, std::move(v_promise[i]));
}
}
あなたが望むことができるかどうかはわかりませんが、とにかく欲しいとは思わない。ループでは、同じオブジェクトを各スレッドに移動しています。最初の反復の後、 'v_promise'は、その内容がスレッドに移動されたので、もはや使用されるべきではありません。 – NathanOliver
'func'が' std :: promise'へのrvalue参照を取る場合、それはおそらく 'v_promise'から' 'v_promise''から移動し、' v_promise'を未指定、おそらくは使えない状態にしておくことを意味します。その場合、どのスレッドが同じオブジェクトをどのように使用できますか? 5つの 'v_promise'を作成するか、左辺の参照を使用する – KABoissonneault
もちろん、複数引数のスレッド関数を使うことができます。しかし、コードには上記の問題があり、とにかく完全ではありません。 – SergeyA