Design Problem - Thread nimmt keine Memberfunktionen



  • Ich habe folgendes Scenario:
    (Nach dem Scenario erst den Teil nach "PS:" lesen)

    class Server {
    private:
    	UDP* RecieverSocket;
    	void Listen();
    	std::thread Listener;
    	Server( /* ... */ );
    }
    
    Server::Listen() {
    	//... do something
    }
    
    Server::Server( /* ... */ ) {
    	Listener = std::thread(&Listen);
    }
    

    Allerdings will der thread die Funktion Listen nicht nehmen, da sie Teil einer Klasse ist.

    Wie löse ich dieses Problem?

    PS: (Alternative Frage, falls ich auf dem richtigen Weg bin: )Ich habe hier: http://www.c-plusplus.net/forum/280475 von "boost::bind()" gelesen, aber thread ist ja jetzt im neuen Standard, wie heißt die equivalente Funktion dazu und wo finde ich sie und wie nutze ich sie richtig?


  • Mod

    Für welches Server-Objekt soll Listen denn aufgerufen werden? Für *this? Wenn du diese Frage beantworten kannst, dann kann man dir helfen. In jedem Fall bist du mit bind schon auf dem richtigen Weg, sei es boost::bind oder das (mehr oder weniger identische) bind aus C++11 (welches du auch haben solltest, wenn du std::thread hast). Oder, wenn du richtig oldschool sein möchtest, mit mem_fun & Co. (Wobei bind dadurch motiviert ist, dass man sich eben nicht mit diesen alten Funktionsbindern rumschlagen möchte.)



  • Ja kann ich, kann es aber nicht ausprobieren, da ich gerade nicht am Rechner mit dem richtigen Compiler (für C++11) bin. Aber jetzt weiß ich ja, was ich brauche.


Anmelden zum Antworten