Ich habe ein Array von Threads und in for
Schleife sollte ich einen Thread für alle von ihnen erstellen.Nehmen Sie mehrere Argumente an die Thread-Funktion C++ 11
Das Problem ist, dass einer der Parameter std::move(promise_var)
ist und eine andere Struktur ist. Wenn ich versuche, es zu kompilieren zu kompilieren gibt mir eine Fehlermeldung:
error: no matching function for call to ‘
std::thread::thread(void (&)(Function), Structure [nNumThreads], std::remove_reference<std::promise<const char*>&>::type)
’
So, hier ist die vereinfachte Version von Code ...
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]));
}
}
Ich bin mir nicht sicher, ob Sie tun können, was Sie wollen, aber ich glaube nicht, dass Sie sowieso wollen. In Ihrer Schleife bewegen Sie das gleiche Objekt in jeden Thread. Nach der ersten Iteration sollte 'v_promise' nicht mehr verwendet werden, da sein Inhalt in den Thread verschoben wurde. – NathanOliver
Wenn 'func' einen rvalue-Verweis auf ein' std :: promise 'nimmt, heißt das, dass es wahrscheinlich von" v_promise "wechselt und" v_promise "in einem nicht angegebenen, möglicherweise unbrauchbaren Zustand verlässt. Wie kann jeder Thread in diesem Fall das gleiche Objekt verwenden? Erstellen Sie entweder 5 'v_promise's oder verwenden Sie eine lvalue-Referenz – KABoissonneault
Natürlich können Sie Multi-Arg-Threading-Funktionen verwenden. Der Code hat jedoch ein Problem, das oben erwähnt wurde, und es ist sowieso nicht vollständig. – SergeyA