timer funktioniert nicht
-
hmmm komisch eigentlich sollte es funzen!
Kann deinen Fehler so jetzt nicht wirklich finden!Wo oder wann wird diese Methode aufgerufen?
void CFLBDlg::DoRatingLoop() { SetTimer(Timer1, 2000, NULL); // Timer wird nach 2 Sek ausgelöst MessageBox(NULL, "start"); }
Kann es sein das du diese Methode niemals aufrufst?
sven
-
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...