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. ]


Anmelden zum Antworten