SetTimer & TimerProc



  • Hallo,

    ich habe Probleme mit der SetTimer Methode und der TimerProc CALLBACK Funktion der windows.h.

    Für eine Anwendung an der ich mitentwickle benötigen wir eine Timer Klasse. Deshalb habe ich versucht für die SetTimer Funktion eine Wrapper-Klasse zu schreiben.

    void Timer::Start(void)
    {
    	unsigned int interval = this->GetInterval();
    
    	UINT_PTR ptr = SetTimer(NULL, this->identifier, interval, &(TIMERPROC)this->PerformTimeEvent); 
    }
    
    void CALLBACK Timer::PerformTimeEvent (HWND hwnd, UINT message, UINT idTimer, DWORD dwTime)
    {
    	this->InformTimeEventListers();
    }
    
    void Timer::InformTimeEventListener (void)
    {
    }
    

    Ich bekomme es einfach nicht hin eine Referenz auf die CALLBACK Methode zu übergeben. Was mache ich falsch ?



  • Das WinAPI ist nach wie vor, und wohl bis auf weiteres, eine C-Schnittstelle, deshalb kann man als Zeiger auf eine Funktion auch keine Klassen-Methode übergeben, denn die enthält ja implizit das this-Objekt, daher müßte man eine Methode static definierten, wobei man dann allerdings wiederum keinen Zugriff auf das this-Objekt hat, ober eben eine reine C-Funktion verwenden.



  • Hallo,

    danke für die Antwort, das hatte ich auch schon so vermutet / befürchtet.

    Gibt es denn ein C++-Schnittstelle für Windows mit einem objektorientierten Timer, bei dem ich Listener registrieren kann ?

    Ich habe da auch schon einen in .NET gefunden, aber das ist ein verwalteter C-Sharp Timer und man darf ja keinen verwalteten mit nicht verwalteten Code mischen.

    Wäre für Hilfe sehr dankbar.

    Viele Grüße



  • Mach Deine CALLBACK "static" und gebe ein Pointer auf "this" mit, dann geht es.



  • Hallo,

    danke für die Hilfe. Das mit der static Methode funktioniert jetzt. Nun habe ich eine direkte Frage zu der SetTimer Funktion.

    Diese erwartet einen Übergabeparameter vom Typ HWND. Was ist das denn für ein Datentyp und wie kann ich einen solchen erhalten. Hat dieser Datentyp etwas mit Threads zu tun ?

    Gruß



  • hWnd
    [in] Handle to the window to be associated with the timer. This window must be owned by the calling thread. If a NULL value for hWnd is passed in along with an nIDEvent of an existing timer, that timer will be replaced in the same way that an existing non-NULL hWnd timer will be.

    der datentyp ist implementation defined



  • Hallo,

    diesen Satz habe ich im MSDN auch gelesen, aber nicht so ganz verstanden.

    Könnt ihr mir das vielleicht kurz erklären ?

    Gruß und Danke



  • Was ist an den ersten beiden Sätzen unverständlich?

    Handle to the window to be associated with the timer. This window must be owned by the calling thread.


  • Mod

    D.h.: Nur der Thread der das Fenster erzeugt hat darf diese Funktion aufrufen.


Anmelden zum Antworten