Thread mit Funktion und Funktionsparametern



  • HAllo Leute,

    für einen Counter, der parallel laufen soll und alle x sekunden ein Signal senden soll möchte ich eine Funktion schreiben, die in einem Thread ausgeführt wird.
    DIese Funktion benötigt jedoch einen Parameter.

    Ich habe es mit std::thread versucht, allerdings scheint diese Funktion keine Funktion mit Funktionsparameter oder samt Funktionsparameter zu anzunehmen.

    std::thread t1 (func);
    

    ich würde gerne sowas wie

    std::thread t1(func(param));
    

    realisieren.

    Erste Frage wäre um welchen Typ handelt es sich bei func. Eine Funktion sollte es nicht sein, da die KLammern fehlen.

    Zweite (viel wichtigere) Frage wäre, wie ich es schaffe eine Funktion mit Parametern im Thread auszuführen.

    Vielen Dank im Vorraus!
    Peter



  • Die Parameter deiner Funktion, werden als Parameter für das Thread-Objekt übergeben.

    Bsp.

    void foo( int i , double d );
    
    //...
    double real;
    //...
    std:thread t{ foo , 42 , real };
    //...
    

    Hilfreich dabei sind auch die STL-Hilfsmittel std::move, std::cref und std::ref



  • std::thread brauchst du tatsächlich in den wenigsten Fällen. Meist ist std::async die bessere Wahl, dann brauchst du dich auch nicht um ein thread-Objekt zu kümmern.



  • Techel schrieb:

    std::thread brauchst du tatsächlich in den wenigsten Fällen. Meist ist std::async die bessere Wahl, dann brauchst du dich auch nicht um ein thread-Objekt zu kümmern.

    Nur das bei std::async nicht garantiert ist, dass die aktion immer in einem separaten thread läuft. Der Kompiler/Runtime kann auch entscheiden die Aktion im selben thread laufen zu lassen.
    Da muss man schon aufpassen wie man std::async aufruft und wie man mit dem std::future objekt umgeht.


Anmelden zum Antworten