Ich möchte in der Lage sein, eine Klasse mit einigen Datenelementen zu definieren, und eine Funktion, die Zugriff auf diese Datenelemente hat, die privat sein sollen.Create Thread innerhalb der Klasse mit Funktion aus der gleichen Klasse
Ich möchte dann eine öffentliche Funktion, die einige Threads erstellt, die für die Datenmitglieder der Klasse arbeiten. Ich habe Probleme, meinen Code kompilieren zu lassen.
Mach dir keine Sorgen über Mutex oder Datenschutz, dies wird kein Problem sein, da dies nur ein Beispielcode zum Testen ist.
class foo {
public:
void make_foo_func_threads();
private:
void foo_func();
char private_data;
std::vector<std::thread> some_threads;
}
void foo::foo_func() {
while(1) {
private_data = 'A';
}
}
void foo::make_foo_func_thread() {
for(...) some_threads.push_back(std::thread(foo_func));
for(...) some_threads.join();
}
Der Compiler mir den Fehler geben:
'no matching call to std::thread::thread()'
Anscheinend gibt es ‚keine bekannte Umwandlung für Argument 1 von <unresolved overloaded function type>
zu void (foo::*&&)'
.
Erm, ja, ich habe keine Ahnung, was das bedeutet, abgesehen von dem Compiler hat Probleme zu verstehen, wie foo_func zu lösen - ich denke.
Wie kann ich dem Compiler helfen zu verstehen, was ich versuche zu tun, damit es mich nicht mit weiteren Fehlern belästigt. Zweifellos ist der Code, den ich geschrieben habe, nicht legal, und wenn das der Fall ist, könnte jemand erklären, warum das der Fall für mich ist. Vielen Dank!
Okay, das ist großartig! Ein Problem allerdings, mein Programm fällt aus dem unteren Bereich von main, obwohl es eine Endlosschleife geben soll. thread.join() scheint nicht darauf zu warten, dass die Threads beitreten! – user3728501
@EdwardBird, könnten Sie das vollständige Programm zu stacked-krumm oder ähnlichem posten und einen Link posten? Oder besser, posten Sie eine andere Frage, um den Beitrag anderer Leute zu bekommen (und diese Antwort, und die andere, haben die gestellte Frage angesprochen). – hmjd
Hoppla, nein mein Schlechter habe ich nicht gestellt f.make_foo_func_threads(); Hauptsächlich! Tut mir leid, es funktioniert gut, alle DONT PANIC! >. < – user3728501