Thread Parameterübergabe (Args... p)



  • Hallo Experten,
    ich möchte eine Memberfunction als Thread ausführen lassen und Parameter (Args... p) übergeben. Alle zwei aufgeführten Aufrufe führen zu einem Comilerfehler. Wie macht man es richtig?
    Hier mein Code:

    // Signal.h
    #include <thread>
    class Signal
    {
    ...
        void send_t(Args... p) {
              for(auto it : _slots) {
                it.second(p...);
              }
        }
    
        void send(Args... p){
            std::thread t(this->send_t(p...)); // Fehler : Invalid use of void expression
            std::thread t(this->send_t,p...); // Fehler : static assertion failed: Wrong number of arguments for pointer-to-member
            t.join();
        }
    }
    


  • Bei einer Memberfunktion benötigt man ja noch ein Objekt (hier 'this'):

    std::thread t(this->send_t, this, p...);
    

    s.a. Ideone-Code sowie C++11 : Start thread by member function with arguments



  • Danke ! Th69



  • Versuch das mal:

    #include <thread>
    #include <utility>
    using namespace std;
    
    class Signal
    {
      public:
    	template<typename ...Args>
    	void send_t( Args... p )
    	{
    	}
    
    	template<typename ...Args>
    	void send( Args... p )
    	{
    		std::thread t( &Signal::send_t<Args...>, this, forward<Args>(p)... );
    		t.join();
    	}
    };
    
    int main()
    {
    	Signal s;
    	s.send( 1.0, 1, 2, 3 );
    }
    

Log in to reply