problem mit wxThread
-
hi, ich mache grade ein kleines ChatProgramm, bei dem sich der Client mittels eines Threads immer die neuen Daten vom Socket holen soll. Dabei benutz ich Wx Thread.
Derzeit sieht meine abgeleitete Thread Klasse so aus:#pragma once #include "base.h" class MyThread : public wxThread{ public : MyThread( //BasicFrame * frameobject ){ //frame = frameobject; } void * Entry(); private : BasicFrame *frame; }; void * MyThread::Entry(){ while(true){ Sleep(10); // frame->Update(); } return NULL; }
Allerdings bekomm ich dabei folgende Fehler:
private : BasicFrame *frame;
1>c:\dokumente und einstellungen\matze.xp-pc\eigene dateien\visual studio 2005\projects\wxhallo\wxhallo\thread.h(14) : error C2143: Syntaxfehler: Es fehlt ';' vor '*'
1>c:\dokumente und einstellungen\matze.xp-pc\eigene dateien\visual studio 2005\projects\wxhallo\wxhallo\thread.h(14) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>c:\dokumente und einstellungen\matze.xp-pc\eigene dateien\visual studio 2005\projects\wxhallo\wxhallo\thread.h(14) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>socket.cppIn base.h ist die Klasse BasicFrame, die von wxFrame abgeleitet ist. Diese Klasse erzeugt dann ein Objekt vom typ MyThread, und übergibt den This Zeiger. So hätt ichs mir zumindest vorgestellt.
Leider komm ich grade nicht weiter, und es wäre sehr nett, wenn mir da bitte jemand helfen könnte. Danke
-
Sehe da 2 Fehler:
1. Für den Pointer zu BasicFrame brauchst du eine Forwarddeclaration, sonst geht das so nicht.
2. Du musst noch <wx/thread.h> einbinden.
-
Danke
. Hab jetzt
class BasicFrame;
drüber geschrieben, und jetzt passts
. Hab nur keine Ahnung warum, was hat das gemacht?
-
Sonst hättest du eine rekursive Einbindung bei den Headern.
Es bewirkt das der Compiler weiss, das dies eine Klasse ist, die später definiert wird.
In der cpp Datei ist dann ja der entsprechende Header eingebunden.Im übrigen solltest du _keine_ Funktionen von GUI Klassen aus einem anderen Thread aufrufen,
du musst dies über Events regeln, da nur so eine störungsfreie Kommunikation zwischen Thread und GUI gewährleistet ist.
-
Hmm, ich hab vorher noch nie was mit Threads gemacht, was genau meinst du damit`? und wie soll ich das über events regeln?.
-
Hm, dann mach dich mal schlau zu dem Thema.
Das Kapitel im wxBuch wäre ein guter Anfang.Du würdest einfach einen (eigenen) Event an das Hauptfenster senden.
Der Grund ist, das man nicht direkt auf das Hauptfenster zugreifen soll, da es ja in einem eigenen Thread läuft,
und man somit in diesen Prozess von aussen eingreift, was nicht so vorteilhaft sein kann.
-
hi phlox81,
was meinst du mit wxBuch? die offizielle doku?
danke...
-
Nein, es gibt ein offizielles wxWidgets Buch, ist aber jetzt wohl auch etwas veraltet, trotzdem noch zu empfehlen, wenn man in wxWidgets einsteigen will.