boost::thread in Klasse



  • Abend!

    Also, ganz fix mein Problem:
    Ich habe in ener Klasse verschiedene Funktionen, davon soll eine die andere als Thread aufrufen. Das ganze sieht dann etwa so aus:

    //MyClass.h
    #ifndef __MYCLASS__
    #define __MYCLASS__
    
    #include <boost/thread.hpp>
    
    class MyClass
    {
    private:
        void myFunction();
        void myThreadFunction();
        boost::thread myThread();
    };
    #endif
    
    //MyClass.cpp
    #include "MyClass.h"
    
    void MyClass::myFunction
    {
        int foo = 32;
        int bar = 21;
    
        int fooBar = foo + bar;
        myThread();
        int barFoo = fooBar * (foo - bar);
        myThread.join();
    }
    
    void MyClass::myThreadFunction()
    {
        //Irgendwas machen
    }
    
    boost::thread myThread()
    {
        return boost::Thread(myThreadFunction);
    }
    

    So, wenn ich das nun kompiliere spuckt der Compiler (VC++ 2008, muss aber halbwegs Plattforumunabhängig bleiben, daher boost) mir nur einen C3867 aus und sagt es würde in Zeile 38 die Argumentliste fehlen, ich solle doch bitte ein & verwenden um einen Zeiger zu bekommen. Wenn ich das mache (return boost::Thread(&myThreadFunction)), dann erhalte ich nur einen error C2276: '&': Ungültige Operation auf Ausdruck einer gebundenen Memberfunktion.
    Das ganze muss jedoch innerhalb der Klasse laufen, sonst wird das ganze echt haarig, ich kann das nicht global deklarieren.
    Any ideas?



  • boost::bind sollte das lösen.



  • Vielleicht mal die Doku zu boost::thread lesen?

    In diesem einfachen Fall:

    //MyClass.h
    #ifndef __MYCLASS__
    #define __MYCLASS__
    
    #include <boost/thread.hpp>
    
    class MyClass
    {
    private:
        void myFunction();
        void myThreadFunction();
    };
    #endif
    
    //MyClass.cpp
    #include "MyClass.h"
    
    void MyClass::myFunction
    {
        int foo = 32;
        int bar = 21;
    
        int fooBar = foo + bar;
    
        boost::thread myThread(boost::bind(&MyClass::myThreadFunction, this));
    
        int barFoo = fooBar * (foo - bar);
    
        myThread.join();
    }
    
    void MyClass::myThreadFunction()
    {
        //Irgendwas machen
    }
    


  • gelesen ja, aber wohl nicht richtig 🙄
    Danke euch.


Anmelden zum Antworten