Objektorientiert und Threads



  • Hi!

    Also mein kleines Problem ist eigentlich, dass Threads ja eine Funktion mit folgendem Aufbau verlangen:

    DWORD ThreadFunc( LPVOID Parameter );

    Nun, ich bin aber derzeit an einem Objektorientiertem Projekt und habe nun meine Klasse CServer.

    Die CServer::StartServer Funktion hat nun die Aufgabe einen Thread zu erstellen.
    Bislang habe ich das ganze so gemacht, dass jene Klasse eine weitere public-Funktion bekommen hat, die über eine zusätzliche Funktion aufgerufen wird:

    DWORD ZusatzFunktion( LPVOID Klasse )
    {
      return ((CServer*)Klasse)->EinePublicFunktion( );
    }
    

    Nun meine Frage, ob das auch anders geht? Dass ich z.B. eine Funktion im private-Bereich der Klasse anlege, die z.B. den benötigten Aufbau hat:
    DWORD EinePrivateFunktion( LPVOID );

    Meinetwegen könnte diese Funktion auch Public sein. Nur würde ich mir gerne den Umweg über eine zusätzliche Funktion außerhalb der Klasse ersparen. Ist das möglich?



  • Wenn ich dich richtig verstehe ruft der Thread also die ZusatzFunktion auf und übergibt dieser die Instanz einer Klasse. Über diese Instanz rufst du dann die eigentiche Funktion auf. Um die ZusatzFunktion in die Klasse zu bekommen musst du sie als static deklarieren (public wird sie bleiben muessen).
    Allerdings wirst du nicht um die ZusatzFunktion kommen, da du nicht ohne Tricks einen Pointer auf eine non-static Member Funktion an eine Windows Funktion übergeben kannst. Zum Aufruf selbiger braeuchte man naemlich die Instanz einer Klasse.
    Vllt hilft dir auch das http://www.c-plusplus.net/forum/viewtopic-var-t-is-39356.html weiter.

    Gruss,
    DeSoVoDaMu



  • Eine static Funktion ist hier wirklich goldrichtig, und public muss sie nicht einmal sein.



  • Hmm. An einen static Eintrag hatte ich auch mal gedacht. Aber nicht in diesem Sinne, also über eine Sonderfunktion.
    Aber klingt besser als wie ich es jetzt habe : )

    Danke jedenfalls für die Hilfe : )


Anmelden zum Antworten