thread im thread



  • hi,

    um auf membervariablen einer klasse aus einem in dieser klasse definierten thread zuzugreifen, muss ich die threadfunc

    static void lala(void);
    

    definieren.

    bei

    _beginthread(lala, 0, this);
    

    bekomme ihc so den this pointer der Klasse zugewiesen, als parameter und kann so auf alle membervariablen und funktionen zugreifen.

    Nur wenn ich nun in diesem Thread einen weiteren Thread definieren will, und wieder möchte, dass dieser Zugriff auf die Membervariablen hat, geht das nicht mehr so einfach, da statische funktionen ja keinen this pointer haben.

    Wie löse ich das Problem dann? MFG, '][' !

    P.S. habe versucht eine memberfunktion zu schreiben, die schlich den this-pointer der klasse zurückliefert, doch dies funktioniert nicht



  • vielleicht hilft dir das?
    http://www.klangwerker.de/php/show.php?path=developer/german&doc=g_base_thread1&update=1

    verstehe dein problem nicht so ganz. der lala funktion wird doch der this zeiger übergeben.



  • das is richtig. nur möchte ich nun, dass aus der lala- funktion wieder ein threag (lala2) gestartet wird, der wiederrum Zugriff auf den this-pointer hat. Dies ging eben nicht, da statische funktionen keinen this- pointer haben (sagt der compiler...)



  • bin heute abend ganz schön verpeilt. muss mich für diese dumme frage entschuldigen. Ich glaube, meinen simplen fehler erkannt zu haben.
    Nochmals sorry!



  • ok, hatte dein problem auch nicht so richtig verstanden. aber mach dir am besten eine thread-klasse von der du dann ableiten kannst.

    class Thread {
    public:
        Thread() : m_hThread(NULL) {
        }
        void Create() {
            m_hThread = reinterpret_cast<HANDLE>(_beginthread(ThreadFunction, 0, this));
        }
    private:
        HANDLE m_hThread;
    
        virtual void Run() = 0;
    
        static void ThreadFunction(void* pThis) {
            static_cast<Thread*>(pThis)->Run();
        }
    };
    
    class TestThread : public Thread {
    public:
        TestThread() : m_nVal(42) {
        }
    private:
        virtual void Run() {
            std::cout << m_nVal << std::endl;
        }
        int m_nVal;
    };
    


  • jo, ich habs dann schon hinbekommen, war ne lapalie. Trotzdem danke!



  • For then debtors are permitted to pay back their debts in a much poorer money than they had borrowed, and creditors are swindled out of the money rightfully theirs. ,


Anmelden zum Antworten