methode einer klasse aus einem thread heraus aufrufen



  • hallo,

    ich habe eine dialogbasierte MFC-Anwendung und ein problem!
    ich möchte aus einen thread heraus eine methode meiner klasse
    aufrufen! ich habe es so gemacht:

    // ich habe ein struct erstellt wo informationen inhalten sind welche der thread benötigt!
    struct test()
    {
       CMyClass* p;
    }
    struct test tester;
    
    ...
    
    // das ist einfach die thread-funktion. sie wird irgendwann aus einer mehtode meiner classe aufgerufen
    void thread-funktion()
    {
       tester.p->OnCloseClient();
    }
    
    ...
    
    // in einer methode meiner klasse mache ich dann folgendes
    tester.p=this;
    CreateThread(...thread-funktion...);
    

    wenn ich es so mache kommt leider ein laufzeitfehler mit sehr
    wenig informationen!

    Fakt ist: wenn ich die funktion "thread-funktion" nicht als thread
    sondern normal aufrufe klappt alles perfekt!!

    warum ist das so?
    danke euch!



  • also wieso gibt es da einen unterschied zwischen
    dem normalen ablauf der funktion und dem ablauf als thread??

    :-|



  • Hallo,

    hast Du schonmal debugged und geschaut wo genau der Laufzeitfehler auftritt. Vielleicht kommt OnCloseClient() einfach nicht damit klar, dass es aus einem Thread heraus aufgerufen wird.
    Warum machst Du Deine struct tester global und übergibst Sie nicht Deinem Thread? Beim Aufruf des Thread kannst Du doch einen Parameter als Pointer übergeben. Oder gleich Deinen this-Pointer.



  • ja klar ich mache das ja gerade auch nur testweise und wollte schaun
    ob mein vorhaben klappt oder nicht.

    ja der Fehler tritt bei dem Aufruf der Methode auf

    aber wieso kommt der fehler nur wenn ich die methode aus der als
    thread gestarteten funktion aufrufe, und nicht wenn ich die funktion
    normal aufrufe?

    warum kommt die methode damit nicht klar?!



  • Ist Deine CMyClass vielleicht ein CWnd-Objekt?
    Es ist immer problematisch, auf diese von einem anderen Thread aus zuzugreifen.

    Du hast immernoch nicht gesagt, wo der Fehler genau auftritt? Steppe mal mit dem Debugger in die Methode. Oder direkt beim Aufruf? Ist der tester-Pointer NULL?


Anmelden zum Antworten