Thread (Wie bekomme ich das hin?)



  • Mit durchlaufen der Funktion endet mein Gültigkeitsbereich!
    ??????



  • richtig
    das bedeutet
    ThreadParam param; //LesePermanent() funktion
    wird gelöscht und
    ThreadParam *Param = (ThreadParam*) pParam; //threadfunktion
    zeigt auf ein objekt das nicht mehr existiert

    lösung: mach ThreadParam param; zu ner membervariable von CAbfrage



  • Ich bin ja glücklich, das ich (mit deiner hilfe) gesehen hab das der Gültigkeitsbereich endet, aber jetzt steh ich auf dem Schlauch.

    Hab ich das richtig verstanden?
    Ich soll im CAbfrage eine membervariable z.B. m_tp vom typ ThreadParam_ anlegen?
    Und dann? 😕



  • ne natürlich in der CInteraktion, sorry



  • hab ich gemacht. Wie es aussieht aber mal zur abwechslung Falsch. 😞
    muß doch nur die Variable "m_tp" da einsetzen wo vorher param stand, oder.

    Jedenfals ging es so nicht und ich habe es wieder zurückgeändert, wobei ich jetzt angeblich einen Fehler in der Struktur habe und eine Neudefinition und noch 17 weitere Fehler.
    Muß erstmal schauen, woran das liegt.



  • warum ging es so nich?



  • Ich habe die Struktur

    typedef struct ThreadParam_
    { 
     CInteraktion* pInteraktion;
     CIOAbfrage* pAbfrage;
    }ThreadParam;
    

    In eine Extra Haeder Datei. "Struktur.h"
    Diese habe ich dann jeweils in "Interaktion.cpp" und in der "Abfrage.cpp" eingebunden.
    Aus irgendeinen Grund stand das aufeinmal in der "Abfrage.h".

    #include "Struktur.h"	// Hinzugefügt von der Klassenansicht
    

    Das gab nen crash.
    -----
    Was soll ich nun machen? die Membervariable kann ich knicken, weil die Struktur bis dahin unbekannt ist.
    Und wenn ich si vorher einbinde gibt es wieder nen crash



  • ich benutz keine structs
    also mach mal aus der struct ne klasse

    class ThreadParam
    {
    public:
    CInteraktion* pInteraktion;
    CIOAbfrage* pAbfrage;
    };

    binde den header in die cpps ein und in den anderen headern schreibst du nur class ThreadParam;

    #ifndef
    #define

    #endif
    nich vergessen

    dann probiers nochmal



  • (Schade das du keine Strukturen nutzt. Ich fand den Ansatz von Rapha gut.)

    Alles gemacht! jetzt ist nurnoch die Klasse nicht definiert.

    error C2079: 'm_tp' verwendet undefiniertes class 'ThreadParam'

    habe aber "class ThreadParam;" vor die Klasse geschrieben.
    Liegt es an der Klasse selbst? Wußte nicht was ich hier schreiben sollte:

    #ifndef ...
    #define ...

    #endif

    Bei mir sieht es so aus. (Struktur.h)

    #ifndef ThreadParam
    #define run
    
    class ThreadParam
    { 
    public:
     CInteraktion* pInteraktion;
     CIOAbfrage* pAbfrage;
    };
    
    #endif
    


  • #ifndef _H__ThreadParam__H_ //falls dieser header noch nich eingebunden wurde
    #define _H__ThreadParam__H_ //binde ihn jetzt ein

    class ThreadParam
    {
    public:
    CInteraktion* pInteraktion;
    CIOAbfrage* pAbfrage;
    };

    #endif //andernfalls überspringe ihn

    wenn du das nich machst kann es sein, dass du den mehrfachdeklaration-fehler bekommst

    ausserdem musst du den header mit #include in die cpp files einbinden

    bzgl. error C2079: 'm_tp' verwendet undefiniertes class 'ThreadParam'
    d.h. dass du auf membervariablen oder memberfunktionen zugegriffen hast ohne vorher den header einzubinden

    class cBlah;
    cBlah einBlah;// OK
    einBlah.func();//Fehler
    #include "cBlah.h"
    einBlah.func();//OK



  • In die beiden cpp's hab ich sie schon eingebunden (Interaktion.cpp , Abfrage.cpp)

    Soll es auch in die StdAfx.cpp ?

    Außerdem hab ich wie du es sagtest "class ThreadParam;" direkt vor die Klassendefinitionen in (Interaktion.h , Abfrage.h) geschrieben.
    Gibt natürlich auch einen Fehler.

    error C2079: 'm_tp' verwendet undefiniertes class 'ThreadParam'

    Ich glaub wenn das gelöst ist sollte es gehen.



  • ne in die StdAfx muss es nich
    was passiert wenn du statt "class ThreadParam;" den header einbindest?



  • Ein Fehler in meiner Klasse. ---EDIT + weiter 15

    class ThreadParam
    { 
    public:
     CInteraktion* pInteraktion;   <====
     CIOAbfrage* pAbfrage;
    };
    

    error C2143: Syntaxfehler : Fehlendes ';' vor '*'

    ---EDIT
    Bei der anderen Variante hatte ich nur 5 Fehler.



  • schreib mal in deinen ThreadParam header nach dem #define

    class CInteraktion;
    class CIOAbfrage;

    jetzt müssts aber langsam mal gehn oder?



  • 😃
    Es Geht. Glaub ich zumindest. Es wird zwar noch nicht das gemacht was ich will, aber es läuft wie es aussieht.

    Vielen Dank.

    Kann ich noch irgendwie überprüfen ob der Thread läuft?
    Außer Debug?



  • mach halt irgendwas in der watch funktion
    MessageBox("test");



  • Ich glaub jetzt ist das schlimmste passiert was geht!
    Kein Fehler, aber es klappt nicht.

    Was jetzt?
    Mein Thread ändert die Variable (m_iAktuell[]) einfach nicht.
    Die MessageBox geht im übrigen garnicht. bekomme dann einen Fehler:

    'MessageBoxA' : Funktion akzeptiert keine 1 Parameter

    Ist aber Korrekte Syntax. Hab es von einer anderen stelle des Programms einfach kopiert.

    Mit MessageBeep(0); gibt es keinen Fehler, aber es gibt auch keinen Beep.



  • dann halt
    MessageBox(NULL,"test","test",MB_OK);

    und schaum mal ob dein handle nach der create funktion == NULL is



  • Toll. 1000 Fenster wieder schließen. Das macht spaß 😃

    Scheint zu laufen der Thread.
    Wie war das jetzt mit dem handle?
    Wo soll ich da nachsehen?



  • Hi,

    ich habe einmal versucht dein Problem zu rekonstruieren.
    Schau dir mal das Projekt an: headfinger_thread.zip
    http://mitglied.lycos.de/rame03/files.htm

    Hast du soetwas gemeint?

    Grüße Rapha


Anmelden zum Antworten