Thread (Wie bekomme ich das hin?)
-
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 KlassenansichtDas 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 klasseclass 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 vergessendann 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 einclass 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 einzubindenclass 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.htmHast du soetwas gemeint?
Grüße Rapha
-
Geil. Das sich jemand soviel mühe für mich macht finde ich wirklich klasse

Danke. Ich werde es gleich an meine Anwendung anpassen und dann nocheinmal schreiben wie es läuft. Sieht aber nahezu perfekt aus.Nur eine Frage noch.
Warum wird der Thread sofort beendet? Wird er doch, oder?Ich schau mal was bei mir passiert.

---------- EDIT ------------

Ich verstehe nicht warum der Thread nicht läuft.
Oder er läuft, aber er macht nicht das was ich will.Habe an deinem Projekt zwei kleinigkeiten geändert. Schau mal.
void CExeDlg::OnAction() { for (int i=0;i<4;i++) { m_pInteraktion->LesePermament(); Sleep(500); // NUR ZU TESTZWECKEN (sonst lieber Mutexe verwenden): Warten, bis Threadfunktion // beendet ist CString strTemp; strTemp.Format("Inhalt von m_a[0] des CInteraktion-Objektes: %d", m_pInteraktion->m_a[0]); MessageBox(strTemp); } }und hier
UINT CAbfrage::Watch(LPVOID pParam) { CInteraktion* pInteraktion = (CInteraktion*) pParam; pInteraktion->m_a[0] = 0; { pInteraktion->m_a[0]++; AfxMessageBox("CAbfrage::Watch() beendet"); }while(TRUE); return 1; }Was ich damit Bezwecke ist glaube ich klar.
Ich will ein paar MessageBoxen haben die mir je einen anderen Wert bringen.
Geht aber nicht.PS. Sollte nicht in den Thread ein Sleep() eingebaut sein?
-
Hi,
setzt mal das while an den Anfang des Blocks:
CInteraktion* pInteraktion = (CInteraktion*) pParam; pInteraktion->m_a[0] = 0; while(TRUE){ pInteraktion->m_a[0]++; AfxMessageBox("CAbfrage::Watch() beendet"); };Viel Spaß beim Klicken

Grüße Rapha
-

Bin ich blöd.
Oder auch nicht?
Dachte echt das kommt ans Ende. Aber es läuft.
Das war echt super von dir. Kann ich dir nen Kaffe spendieren? Ich mach auch nen Kuchen dazu.
Endlich. Mein erster Thread der läuft.
Das versuche ich nächst Woche gleich nochmal, und dann versuch ich es ohne HilfeBYE und DANK an
Rapha und
Sovok