Thread und Callback



  • Ich habe einen Thread erstellt, der sich um Netzwerkfragen kümmert (es handelt sich also nicht um ein Window)

    Thread* hola = new Thread(new ThreadStart(0, &myThread::ThreadProc));

    Das funktioniert soweit tadellos, aber natürlich würde ich diesen Thread gern mit einer Callback-Funktion versehen,
    Die einfachste Lösung, die ich angehen würde, wäre, der Klasse

    myThread
    

    eine Variable zuordnen
    etwa

    bool onDisconnect;
    

    Wenn die Hauptapplikation diese Variable auf true setzt, würde der Thread sich selbst beenden,

    while(1)
    {
    if (onDisconnect == true) machSchluss();
    }
    

    Mein Problem besteht nun darin, dass ich keine Ahnung habe, wie ich von außen an diese Memberfunktion, geschweige, wie ich überhaupt an die Instanz der Klasse herankomme.



  • Thread* hola = new Thread(new ThreadStart(0, &myThread::ThreadProc));
    

    Hier erstellst du doch eine Instanz von Thread mit dem Namen hola. So würdest du es doch auch mit myThread machen. und dann einfach hola->onDisconnect = true;



  • Eigentlich wäre das vollkommen logisch,

    aber __gc funktioniert nach einer Verkapselungslogik (Puppe in Puppe) - und so
    teit mir der Compiler mit, dass ihm onDisconnet unbekannt ist.
    Irgendwo in dieser Klasse muss eine Memberfunktion stecken, die mir den Zugriff auf mythtread ermöglicht, aber ich habe keine Ahnung wo.
    Hier die ursprüngliche Klasse:

    __gc class mythread
    {
    public:
      bool onDisconnect;
         static void ThreadProc()
         {
         }
         ;
    };
    

    Leider finde ich auch bei Microsoft kein ordentliches Beispiel...



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Problem gelöst.
    Ich war so blöd, der Klasse keinen Konstruktor mitzugeben - wegen dieses neuen gc Typs.

    Man erstellt sie einfach mit

    mythread m = new mythread();

    und weist dann dem Thread den Pointer der Klasse zu.

    hread* hola = new Thread(new ThreadStart(0, m->ThreadProc));

    Dank schön trotzdem.


Anmelden zum Antworten