2016-05-22 8 views
2

Ich habe Probleme beim Erstellen von vier Threads in einer Klasse mit jeweils einer anderen Member-Funktion, um den Inhalt jedes Vektors auszudrucken. Jedoch bekomme ich einen Fehler no instance of constructor "std::thread::thread" matches the argument list auf diesen 4 Zeilen, wenn ich den Thread mache. Ich weiß nicht, warum es nicht funktioniert, wenn ich versuche, eine andere Mitgliedsfunktion für den Thread zu verwenden. Könnte es sein, weil sie in einer Klasse sind? Wie würde ich diese 4 Fehler beheben?Wie mache ich vier Threads in einer Klasse C++

class PrintfourVectors 
{ 
private: 
    vector<string> one; 
    vector<string> two; 
    vector<string> three; 
    vector<string> four; 
public: 
    void printOne() 
    { 
     // do stuff 
    } 

    void printTwo() 
    { 
     // do stuff 
    } 


    void printThree() 
    { 
     // do stuff 
    } 

    void printFour() 
    { 
     // do stuff 
    } 

    void makeFourThreads() 
    { 
     thread threadone(printOne); // error here 
     thread threadtwo(printTwo); // error here 
     thread threadthree(printThree); // error here 
     thread threadfour(printFour); // error here 

     threadone.join(); 
     threadtwo.join(); 
     threadthree.join(); 
     threadfour.join(); 

    } 

}; 

Antwort

2

Ein Problem ist, dass Sie nicht-statische Member-Funktionen anrufen, und die haben ein „verstecktes“ erstes Argument, das die this Zeiger in den Funktionen wird. Daher müssen Sie beim Erstellen von Threads mithilfe der nicht statischen Elementfunktion die Objektinstanz als Argument an die Threadfunktion übergeben.

Wie

thread threadone(&PrintfourVectors::printOne, this); 
//           ^^^^ 
// Pass pointer to object instance as argument to the thread function 
Verwandte Themen