Simpler Benutzerthread killt ganzes Programm :(
-
Hi Zusammen,
ich habe da grad ein kleines Problem mit 'nem Benutzerthread und hoffe Ihr
könnt mir helfen
Der Thread selbst sieht so aus (Dank an C-O-M-M-A-N-D-E-R );
#include "MORK_BEWEGUNGDlg.h" class TTextThread : public CWinThread { DECLARE_DYNCREATE(TTextThread) public: virtual int Run(); virtual BOOL InitInstance(); virtual int ExitInstance(); void ZeichneSchrift(); void SetOwner(CMORK_BEWEGUNGDlg* pOwner); CMORK_BEWEGUNGDlg * m_dialogvar; CMORK_BEWEGUNGDlg * m_pOwner; CString m_sText; int m_iXPosition; int m_iYPosition; int m_iAnzeigeDauer; bool m_bEnde; protected: TTextThread(); virtual ~TTextThread(); DECLARE_MESSAGE_MAP() };Dieser Thread wird im Rahmen der folgenden Klasse implementiert:
#include "TTextThread.h" class AThreadAdapter { public: AThreadAdapter(); virtual ~AThreadAdapter(); /*** Threads ***/ TTextThread * threadSprechen; TTextThread * threadAnsehen; };Und diese Klasse wiederum im Rahmen der Haupt-Dialog-Klasse:
#include "AThreadAdapter.h" class CMORK_BEWEGUNGDlg : public CDialog { public: [...] // C'tor etc. protected: [...] // Diverser MFC-Kram private: [...] // Meine Vars AThreadAdapter threadAdapter; };Der Versuch den Thread im Haupt-Dialog zu nutzen sieht wie folgt aus:
threadAdapter.threadSprechen = (TTextThread*) AfxBeginThread(RUNTIME_CLASS(TTextThread), NULL, 0, CREATE_SUSPENDED); threadAdapter.threadSprechen.SetOwner(this); threadAdapter.threadSprechen.m_sText = m_sEingabe; threadAdapter.threadSprechen.m_iXPosition = 320; threadAdapter.threadSprechen.m_iYPosition = 320; threadAdapter.threadSprechen.ResumeThread();Und enden tut das ganze am Compiler welcher bemerkt:
Compiling...
AThreadAdapter.cpp
d:\c++\programme\mork_bewegung\mork_bewegungdlg.h(52) : error C2146: syntax error : missing ';' before identifier 'threadAdapter'
d:\c++\programme\mork_bewegung\mork_bewegungdlg.h(52) : error C2501: 'AThreadAdapter' : missing storage-class or type specifiers
d:\c++\programme\mork_bewegung\mork_bewegungdlg.h(52) : error C2501: 'threadAdapter' : missing storage-class or type specifiers
MORK_BEWEGUNG.cpp
d:\c++\programme\mork_bewegung\ttextthread.h(28) : error C2061: syntax error : identifier 'CMORK_BEWEGUNGDlg'
d:\c++\programme\mork_bewegung\ttextthread.h(30) : error C2143: syntax error : missing ';' before ''
d:\c++\programme\mork_bewegung\ttextthread.h(30) : error C2501: 'CMORK_BEWEGUNGDlg' : missing storage-class or type specifiers
d:\c++\programme\mork_bewegung\ttextthread.h(30) : error C2501: 'm_dialogvar' : missing storage-class or type specifiers
d:\c++\programme\mork_bewegung\ttextthread.h(31) : error C2143: syntax error : missing ';' before ''
d:\c++\programme\mork_bewegung\ttextthread.h(31) : error C2501: 'CMORK_BEWEGUNGDlg' : missing storage-class or type specifiers
d:\c++\programme\mork_bewegung\ttextthread.h(31) : error C2501: 'm_pOwner' : missing storage-class or type specifiers
MORK_BEWEGUNGDlg.cpp
d:\c++\programme\mork_bewegung\ttextthread.h(28) : error C2061: syntax error : identifier 'CMORK_BEWEGUNGDlg'
d:\c++\programme\mork_bewegung\ttextthread.h(30) : error C2143: syntax error : missing ';' before ''
d:\c++\programme\mork_bewegung\ttextthread.h(30) : error C2501: 'CMORK_BEWEGUNGDlg' : missing storage-class or type specifiers
d:\c++\programme\mork_bewegung\ttextthread.h(30) : error C2501: 'm_dialogvar' : missing storage-class or type specifiers
d:\c++\programme\mork_bewegung\ttextthread.h(31) : error C2143: syntax error : missing ';' before ''
d:\c++\programme\mork_bewegung\ttextthread.h(31) : error C2501: 'CMORK_BEWEGUNGDlg' : missing storage-class or type specifiers
d:\c++\programme\mork_bewegung\ttextthread.h(31) : error C2501: 'm_pOwner' : missing storage-class or type specifiers
D:\C++\Programme\MORK_BEWEGUNG\MORK_BEWEGUNGDlg.cpp(401) : error C2228: left of '.SetOwner' must have class/struct/union type
D:\C++\Programme\MORK_BEWEGUNG\MORK_BEWEGUNGDlg.cpp(403) : error C2228: left of '.m_sText' must have class/struct/union type
D:\C++\Programme\MORK_BEWEGUNG\MORK_BEWEGUNGDlg.cpp(404) : error C2228: left of '.m_iXPosition' must have class/struct/union type
D:\C++\Programme\MORK_BEWEGUNG\MORK_BEWEGUNGDlg.cpp(405) : error C2228: left of '.m_iYPosition' must have class/struct/union type
D:\C++\Programme\MORK_BEWEGUNG\MORK_BEWEGUNGDlg.cpp(408) : error C2228: left of '.ResumeThread' must have class/struct/union type
TTextThread.cpp
d:\c++\programme\mork_bewegung\athreadadapter.h(23) : error C2143: syntax error : missing ';' before ''
d:\c++\programme\mork_bewegung\athreadadapter.h(23) : error C2501: 'TTextThread' : missing storage-class or type specifiers
d:\c++\programme\mork_bewegung\athreadadapter.h(23) : error C2501: 'threadSprechen' : missing storage-class or type specifiers
d:\c++\programme\mork_bewegung\athreadadapter.h(24) : error C2143: syntax error : missing ';' before ''
d:\c++\programme\mork_bewegung\athreadadapter.h(24) : error C2501: 'TTextThread' : missing storage-class or type specifiers
d:\c++\programme\mork_bewegung\athreadadapter.h(24) : error C2501: 'threadAnsehen' : missing storage-class or type specifiers
Generating Code...
Error executing cl.exe.MORK_BEWEGUNG.exe - 28 error(s), 0 warning(s)
Es wäre schön wenn irgendeiner dre Cracks da draussen sich das mal ansehen
könnte, denn ich verliere an diesem Problem (welches eigentlich eines der
kleiner des Programms ist) so langsam den Verstand
Imho sollte das alles so
passen und ich habe auch schon x verschiedene Kombinationen ausprobiert den
Thread irgendwo anders unter zu bringen oder in anderer Form zu nutzen.
Leider klappt das alles nicht.Danke im Voraus,
Khadgar
-
Sieht aus, als hättest du ein
#include "....h"vergessen.
-
Sorry estartu_de, rall ich nicht.
Kannst du das evtl. spezifiieren?
-
Du hast nen Problem mit deinen Includes:
MORK_BEWEGUNGDlg.h bindet AThreadAdapter.h ein.
AThreadAdapter.h bindet TTextThread.h ein.
TTextThread.h bindet MORK_BEWEGUNGDlg.h ein.Du hast ne Include-Endlosschleife (sozusagen)
Mach in deine TTextThread.h einfach ne Vorwärtsdeklaration von CMORK_BEWEGUNGDlg und binde MORK_BEWEGUNGDlg.h in TTextThread.cpp ein.
Vorwärtsdeklaration sieht so aus:class CMORK_BEWEGUNGDlg;und muss vor
class TTextThread : public CWinThreadstehen.
-
@dEUs:
Nomes est omen. Du bist ab Heute mein pers. Problemlösungsgott
Vielen, vielen Dank!
Endlich kann ich wieder ruhig schlafen
Gruß,
Khadgar
-
*g*
büdde
-
Heisst übrigens: "nomen est omen."

-
*gnarf*
Hätte ich mein Lateinbuch nicht schon vor Jahren auf den Dachboden verfrachtet