timer funktioniert nicht



  • doch doch 🙂
    hab immerhin noch ne messge box da eingefügt und die meldung kommt auch.

    ulath



  • aber diese

    MessageBox(NULL, "ausführen");
    

    kommt nicht, richtig?



  • jo .. und die mit "bla" auch net



  • Hallo,

    probier mal die MessageBox nach SetTimer herrauszunehmen, möglicherweise ist der Dialog für WM_TIMER blockiert.

    Gruss moskito



  • jo

    das wär mein nächster Tip gewesen!

    Timer und Afx´s mögen sich nicht so gerne, aber warum das so ist ...
    kann uns ja hoffentlich jemand erklären ...

    sven



  • hmm ne auch am brakepoint hält der net an ..



  • Hallo,

    habe das selbe Problem:

    void COpenGLPane::OnInitialUpdate() 
    {
    CView::OnInitialUpdate();	
    SetTimer(1,300,NULL);
    }
    .
    .
    .
    void COpenGLPane::OnTimer(UINT nIDEvent) 
    {
    CSDIFrameDoc* pDoc = GetDocument();
    
    actualTime++;
    
    CView::OnTimer(nIDEvent);
    }
    

    actualTime wird aber nicht inkrementiert!?!?! 😕

    Jemand ne Idee???



  • OnTimer ist auch in der Message Map drin, und dein Programm ist "Idle" (i.e. der Main Thread verarbeitet Nutzereingaben)?

    Wenn ja: Spy++, dein OpenGL-Fenster, den Filter auf WM_TIMER stellen, und mal nachgucken, ob das Fenster eine WM_TIMER-message bekommt.



  • Nein, bekommt es nicht!

    So tief bin ich in die Materie auch noch nicht eingestiegen: Wie regel ich denn das mit der Message Map? Habe mich immer auf das Visual Studio verlassen 😃

    Habe aber im Code folgendes entdeckt - vielleicht kann jamnd damit was anfangen:

    // Generierte Nachrichtenzuordnungsfunktionen
    protected:
    	//{{AFX_MSG(COpenGLPane)
    	afx_msg void OnSize(UINT nType, int cx, int cy);
    	afx_msg BOOL OnEraseBkgnd(CDC* pDC);
    	afx_msg void OnCancelMode();
    	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
    	afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
    	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
    	afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
    	afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
    	afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
    	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    	afx_msg void OnTimer(UINT nIDEvent);
    	afx_msg void OnDestroy();
    	//}}AFX_MSG
    	DECLARE_MESSAGE_MAP()
    


  • Außerdem:

    BEGIN_MESSAGE_MAP(COpenGLPane, CView)
    	//{{AFX_MSG_MAP(COpenGLPane)
    	ON_WM_SIZE()
    	ON_WM_ERASEBKGND()
    	ON_WM_CANCELMODE()
    	ON_WM_LBUTTONDOWN()
    	ON_WM_LBUTTONUP()
    	ON_WM_MOUSEMOVE()
    	ON_WM_MOUSEWHEEL()
    	ON_WM_RBUTTONUP()
    	ON_WM_RBUTTONDOWN()
    	ON_WM_CREATE()
    	ON_WM_TIMER()
    	ON_WM_DESTROY()
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    

    Scheint doch alles drin zu sein, oder?



  • yup, das erste Teil deklariert die OnTimer-Funktion (mit der richtigen Aufrufkonvention), die Message Map sagt, das bei der Windows Message WM_TIMER deine Funktion OnTimer aufgerufen werden soll.

    Wenn du noch Probleme mit dem Spy hast (wirklich ein Supertool für solche Fragen), dann mach folgendes: Erstell eine Dialogbasierte MFC-Anwendung mit dem Wizard, und füge dort einen ähnlichen Timer direkt im Hauptdialog ein. Mit so einer "Sandbox" kann man die Unterschiede einkreisen.



  • debug doch mal und schau was er macht...



  • hmm bei mir fehlen diese einträge vollständig ..
    wie verknüpfe ich denn die message ON_WM_TIMER mit der Funktion OnTimer() ?



  • [edit]
    Der Class Wizard kann diese einträge erstellen. (siehe MSDN,MFC tutorials)

    oder:
    Funktion deklarieren wie oben
    ON_WM_TIMER() in die Message-Map eintragen



  • kannst auch einfach auf deine Klasse klicken (rechte Maustaste) und dann MessageHandler auswählen



  • Sooo...

    also, Spy++ liefert mir für den OpenGLPane einen Haufen WM_ONPAINT und WM_MOUSEMOVE, aber keinen einzigen ON_TIMER 😞

    Wenn ich debugge, und in der OnTimer() einen Haltepunkt setze, springt er da auch nie rein.

    Wie kann das? Ist mein Timer kaputt? 😉



  • super es hat endlich geklappt !
    es fehlten tatsächlich noch die message map einträge ....
    naja mit dem tip von timo hats dann geklappt !!

    THX noch mal !!

    Ulath



  • Bei mir klappt's leider nach wie vor nicht 😞



  • Hängt es vielleicht damit zusammen, daß ich mit zwei Frames arbeite? Das Animations-Frame habe ich von CView abgeleitet - eigentlich müßte das doch laufen...



  • SetTimer(1,300,NULL);
    

    -> versuch da mal statt der 1 ne resourcen id einzufügen !

    geht unter ressourcen -> rechte maustaste auf project ressourcen -> ressourcensymbole

    da ID_TIMER am besten nen eindeutigen wert zuweisen ..

    SetTimer(ID_TIMER,300,NULL);
    

Anmelden zum Antworten