Eigene Klasse die Uhrzeit auf ein Fenster malt
-
Hi,
Ich versuche mir gerade eine eigene Klasse zu schreiben der ich ein paar Parameter übergebe und die dann die aktuelle Uhrzeit auf ein Fenster malen soll:
class uhr { public : uhr(HDC hdc,HWND hwnd,int x,int y); ~uhr(){}; void Thread(PVOID pvoid); int x; int y; TCHAR uhrzeit[8]; HDC hdc; HWND hwnd; SYSTEMTIME systime; }; uhr::uhr(HDC hdc,HWND hwnd,int x,int y) { this->hdc = hdc; this->hwnd = hwnd; this->x = x; this->y = y; } void uhr::Thread(PVOID pvoid) { while(true) { GetLocalTime(&systime); wsprintf(uhrzeit, "%02d:%02d:%02d", systime.wHour, systime.wMinute, systime.wSecond); hdc = GetDC(hwnd); TextOut (this->hdc,this->x,this->y,uhrzeit,strlen(uhrzeit)); ReleaseDC(hwnd,hdc); Sleep(1000); } }
Wenn ich jedoch nun aus dem Hauptprogramm eine neue Instanz erzeuge und diese dann versuche über _beginthread zu starten klappt dies nicht:
uhr myUhr(hdc,hwnd,10,5); switch (message) { case WM_CREATE : _beginthread(myUhr.Thread,0,NULL); return 0 ;
Als Fehler gibt es:
(136) : error C2664: '_beginthread' : Konvertierung des Parameters 1 von 'void (void *)' in 'void (__cdecl *)(void *)' nicht moeglich Keine Funktion mit diesem Namen im Gueltigkeitsbereich stimmt mit dem Zieltyp ueberein
[ Dieser Beitrag wurde am 27.05.2003 um 15:34 Uhr von 0x0000F editiert. ]
-
Mach Thread mal nicht als member von Uhr...
EDIT: ODer static[ Dieser Beitrag wurde am 27.05.2003 um 15:49 Uhr von MaSTaH editiert. ]
-
die thread-funktion, so sie in eine klasse einbettet ist, muss STATIC sein ( _stdcall vs. _thiscall )
rocknix ///
-
Wenn ich die Theardmethode static mache also so:
class uhr { public : uhr(HDC hdc,HWND hwnd,int x,int y); ~uhr(){}; static void Thread(PVOID pvoid); int x; int y; TCHAR uhrzeit[8]; HDC hdc; HWND hwnd; SYSTEMTIME systime; }; uhr::uhr(HDC hdc,HWND hwnd,int x,int y) { this->hdc = hdc; this->hwnd = hwnd; this->x = x; this->y = y; } static void uhr::Thread(PVOID pvoid) { while(true) { GetLocalTime(&systime); wsprintf(uhrzeit, "%02d:%02d:%02d", systime.wHour, systime.wMinute, systime.wSecond); hdc = GetDC(hwnd); TextOut (hdc,x,y,uhrzeit,strlen(uhrzeit)); ReleaseDC(hwnd,hdc); Sleep(1000); } }
Bekomme ich reihenweise Fehler:
(24) : error C2724: 'Thread' : 'static' sollte nicht fuer Member-Funktionen verwendet werden, die ausserhalb der Klasse definiert werden (28) : error C2664: 'GetLocalTime' : Konvertierung des Parameters 1 von 'struct _SYSTEMTIME uhr::*' in 'struct _SYSTEMTIME *' nicht moeglich Es gibt keinen Kontext, in dem diese Konvertierung moeglich ist (29) : error C2597: Ungueltige Referenz auf ein Datenelement 'uhr::uhrzeit' in einer statischen Member-Funktion (29) : error C2228: Der linke Teil von '.wHour' muss eine Klasse/Struktur/Union sein (29) : error C2228: Der linke Teil von '.wMinute' muss eine Klasse/Struktur/Union sein (29) : error C2228: Der linke Teil von '.wSecond' muss eine Klasse/Struktur/Union sein (30) : error C2597: Ungueltige Referenz auf ein Datenelement 'uhr::hwnd' in einer statischen Member-Funktion (31) : error C2597: Ungueltige Referenz auf ein Datenelement 'uhr::hdc' in einer statischen Member-Funktion (31) : error C2597: Ungueltige Referenz auf ein Datenelement 'uhr::x' in einer statischen Member-Funktion (31) : error C2597: Ungueltige Referenz auf ein Datenelement 'uhr::y' in einer statischen Member-Funktion (31) : error C2597: Ungueltige Referenz auf ein Datenelement 'uhr::uhrzeit' in einer statischen Member-Funktion (31) : error C2597: Ungueltige Referenz auf ein Datenelement 'uhr::uhrzeit' in einer statischen Member-Funktion (32) : error C2597: Ungueltige Referenz auf ein Datenelement 'uhr::hwnd' in einer statischen Member-Funktion (32) : error C2597: Ungueltige Referenz auf ein Datenelement 'uhr::hdc' in einer statischen Member-Funktion Fehler beim Ausführen von cl.exe.
Woran liegt den das nun genau warum muss die Threadmethode static sein und woher kommen auf einmal diese ganzen Fehler
[ Dieser Beitrag wurde am 27.05.2003 um 16:15 Uhr von 0x0000F editiert. ]