Klassenfunktion mit std::thread aufurfen
-
Wie kann ich in meiner main()-Funktion mit std::thread eine nicht-statische Klassenfunktion aufrufen?
Mir ist klar, dass dieser Code hier nicht funktionieren kann. Ich weiß aber nicht, was ich machen muss, damit er funktioniert.
#include <thread> class Test { void myFunc(); }; int main() { std::thread t(&Test::myFunc); t.join(); }Fehler 5 error C2064: Ausdruck ergibt keine Funktion, die 0 Argumente übernimmt f:\programme\visual studio 2012 express für windows 8\vc\include\functional 1152
-
Am einfachsten sind Lambdas.
struct Test { void myFunc() { std::cout << "test\n"; } }; int main() { Test test; std::thread t([&](){test.myFunc();}); t.join(); }
-
@TE Und auf welchem Objekt soll die Funktion dann aufgerufen werden? Den this Zeiger musst du schon angeben, den kann der Compiler sich nicht aus dem Arsch ziehen.

+1 für Lambdas btw.
-
cooky451 schrieb:
+1 für Lambdas btw.
Hier voellig fehl am Platz, macht std::thread alles automatisch. Ob man
testnoch mitstd::refwrappen moechte, kommt drauf an.struct Test { void myFunc() { std::cout << "test\n"; } }; int main() { Test test; std::thread t(&Test::myFunc, test); t.join(); }
-
knivil schrieb:
Ob man
testnoch mitstd::refwrappen moechte, kommt drauf an.Worauf?
-
Ob man eine Kopie moechte oder nicht.
-
Ah, logisch
Hab gepennt ... Hatte irgendwie thisals Argument im Kopf und mich darüber gewundert, was da einstd::refzu suchen hat. :xmas1:
-
Du kannst auch ein Test* übergeben.