C++11: Thread erstellen



  • Hallo,

    ich möchte in einer rekursiven Funktion einen Thread erstellen, damit verschiedene Fälle nebeneinander abgearbeitet werden können.
    Nun bekomme ich aber den Fehler, dass kein Konstruktor von Thread vorhanden ist, der dieser Argumentenliste übereinstimmt:

    die Funktion:
    void loesen(int n, bitset<100> &b, vector<int> &vk, int s) {...}

    der Fehler:
    t1 = thread(loesen,(s-2),bit1,vk,s);

    t1 ist global deklariert.
    Habt ihr eine Idee, woran es liegen könnte?
    Die IDE zeigt mir auch an, dass es einen Konstruktor für Funktion + vier
    Argumenten gibt, aber der Compilier weigert sich trotzdem.

    Danke!



  • Solche Probleme behebt man am besten, in dem man ein reduziertes compilierbares Beispiel erzeugt. Entweder findet man den Fehler selbst raus, der man hat genau den richtigen Code um ihn hier zu zeigen.

    Was mir auffällt:
    - Der Aufruf kann so gar nicht funktionieren, da loesen eine Referenz auf den Vektor und das bitset erwartet und du es per Value übergibst. Verwende da std::ref
    - t1 global zu deklarieren kann nur schiefgehen, weil sobald t1 erneut zugewiesen wird, der alte Thread (der möglicherweise die Zuweisung macht) abgewürgt wird.

    Möglicher Workaround:

    void loesen(int n, std::bitset<100> b, std::vector<int> &vk, int s) {...}
    
    std::thread t(loesen,(s-2), std::ref(bit1),std::ref(vk),s);
    
    // später:
    t.join();
    


  • Okay, den Fehler habe ich gefunden.
    Der Tipp des Zusammenschneiden des Codes war sehr hilfreich, kannte die Methode noch nicht.

    Ich hatte die Funktion noch in einer Klasse als friend deklariert, aber dort mit anderen Parametern, als ich noch rumprobiert habe. Das hat wohl verwirrt.

    also:
    Danke!! 🙂


Anmelden zum Antworten