Timer-Problem...
-
Hi,
ich habe, wie der Title schon sagt, ein Problem mit einem Timer. Also ich erstelle ihn vollgender Maßen:Variable
UINT_PTR m_Timer;
Das erstellen des Timers
BOOL CTestAppView::PreCreateWindow(CREATESTRUCT& cs) { m_Timer = SetTimer(1, 2000, NULL); return CView::PreCreateWindow(cs); }
Meine OnTimer-Funktion
void CTestAppView::OnTimer(UINT nIDEvent) { if(nIDEvent == m_Timer) { //DieFunktion(); MessageBox("Timer!"); } CView::OnTimer(nIDEvent); }
Der Timer soll alle 2 Sekunden auf gefrufen werden (2000 Milisek). Demnach sollte die Funktion OnTimer() auch alle 2 Sekunden aufgerufen werden, aber das wird sie nicht.
BTW. OnTimer() soll nochmal eine andere Funktion aufrufen...Ich kann mir nicht erklähren warum das nicht funktioniert. Findet einer von euch den Fehler?
-
Wird die OnTimer Methode überhaupt mal aufgerufen?
-
m_Timer = SetTimer(1, 2000, NULL);
Kann das falsch sein?? Versuch es mal so:
SetTimer(m_Timer, 2000, NULL);
Also ich kenne es nur so das ich ein Resourcen Symbol einbinde, diesen dann TIMER nenn und dann klappt das auch!
-
Also ich kenne das so:
Um einen Timer zu starten, muss man zunächst, wie im vorherigen Beitrag beschrieben, eine Ressourcen hinzufügen (also 'ne ID für den Timer).
Dann kann man den Timer so starten:
SetTimer(ID_MY_TIMER, 2000, NULL);
In der Methode OnTimer, wird die als Parameter übergebene EventID mit der ID des Timers verglichen:
void meineView::OnTimer(UINT nIDEvent) { if(nIDEvent == ID_MY_TIMER) //weiterer Code }
-
DarkLord schrieb:
Das erstellen des Timers
BOOL CTestAppView::PreCreateWindow(CREATESTRUCT& cs) { [b]m_Timer = SetTimer(1, 2000, NULL); [/b] return CView::PreCreateWindow(cs); }
Woher kommt die 1 in deinem Timeraufruf?
Diese Zahl müsste dan vom Typ UINT_PTR sein. Der Rückgabewert der SetTimer Methode ist ein Integer...Versuchs mal so (Wie Union222):
Anlegen einer Timerressource unter Ressourcen im Projektmanger, dann rechten Mausklick auf Ressourcenordner, dann Ressourcensymbole anwählen und mit Neu eine neue Ressource anlegen (ID_MyTimer; Wert = 100, oder so)...Dann:
SetTimer(ID_MyTimer, 2000, NULL);
Dann in der On_TIMER Methode:
void CTestAppView::OnTimer(UINT nIDEvent) { switch (nIDEvent) { case ID_MyTimer: break; } CView::OnTimer(nIDEvent); }
Ich habe Dir da noch n' Link:
[url]
http://www.codeproject.com/system/timers_intro.asp
[/url]Da werden die einzelnen Timertypen genau beschrieben und es wird gezeigt, wie
mans macht...Gruz
Dan